2008-05-24

sp_helptext

Merhaba Değerli Okuyucular,

Bugün SQL Server'ı kullanırken işimize çok yaracak bir SP ye değineceğim: sp_helptext. sp_helptext ile bir rule, default, unencrypted stored procedure(sp), user defined function(udf), trigger, veya view'ın text içeriğini görüntüleyebilirsiniz. Böyle yararlı bir sp olmadığı zaman tek tek ilgili nesneleri bulup scriptlerini almak ne kadar zahmetli olduğunu yaşayan arkadaşlara anlatmama gerek yok ama yaşamayan arkadaşlar zorluğu yaşadıktan sonra bana hak vereceklerdir.

sp_helptext in syntax'ı aşağıdaki gibidir:

sp_helptext [ @objname = ] 'name'

Şimdi bir örnek ile olayı daha iyi kavrayalım. spKonuyaPuanVer sp sinin içeriğini görüntülemek için

sp_helptext 'spKonuyaPuanVer '

yazmamış yeterli olacak. Bu komutun sonucunda ilgili SP nin text içeriği ekrana dökülür. SQL Server'da bir nesnenin SQL kodunu mu merak ediyorsunuz buyrun size sp_helptext. Tabi bu sp ile SQL Server'ın system sp, view ve diğer bileşenlerinin kodunu da görüntüleyebilirsiniz. Böylelikle merak ettiğiniz herhangi bir nesnenin nasıl kodlanğını görme şansınız olacak.

Geçen haftalarda sorduğum sorunun cevabı olan sp_databases SP nin kodunu böylelikle vermiş olayım:) Bunun için

sp_helptext 'sp_databases'

kodunu yazmamız yeterli olacak. Bu scriptin sonucundan sp_databases sp nin içeriğini aşağıdaki gibi alırız.

create proc sp_databases
as
set nocount on
declare @name sysname
declare @SQL nvarchar(600)
/* Use temporary table to sum up database size w/o using group by */
create table #databases (
DATABASE_NAME sysname NOT NULL,
size int NOT NULL
)

declare c1 cursor for
select name from master.dbo.sysdatabases
where has_dbaccess(name) = 1 -- Only look at databases to which we have access

open c1
fetch c1 into @name

while @@fetch_status >= 0
begin
select @SQL = 'insert into #databases
select N'''+ @name + ''', sum(size)
from ' + QuoteName(@name) + '.dbo.sysfiles'
/* Insert row for each database */
execute (@SQL) fetch c1 into @name
end
deallocate c1

select DATABASE_NAME,
DATABASE_SIZE = size*8,/* Convert from 8192 byte pages to K */
REMARKS = convert(varchar(254),null) /* Remarks are NULL */
from #databases
order by 1

Hiç yorum yok:

.::YASAL UYARI::.

©2004-2023 Mehmet GÜZEL, www.mehmetguzel.net

Site içeriği kaynak gösterilmek koşuluyla yayınlanabilir. Yazılan yazı ve yorumlar sadece yazı ve yorum sahiplerini bağlar.