2011-10-07 11 views
17

Eski bir veritabanı sistemini araştırıyorum ve içeriğiyle ilgili çok az bilgiye sahibim. Başka bir saklı yordamını (A) çağıran tüm saklı yordamları bulmak istiyorum.SQL Server'da saklı yordamların içeriğinin sorgulanması

Bunu en iyi nasıl yaparsınız?

bu pseudocode gibi bir şey yazabilir:

select name from AllStoredProcedures as Asp where Asp.TextualContent contains 'A' 

Asp.TextualContent SP bulunan gerçek SQL anlamına gelir.

+0

SQL Server hangi sürümünü deneyin? –

+0

SQL Server 2005 – Ben

cevap

37
SELECT 
    OBJECT_NAME(OBJECT_ID), 
    definition 
FROM 
    sys.sql_modules 
WHERE 
    objectproperty(OBJECT_ID, 'IsProcedure') = 1 
AND definition LIKE '%Foo%' 
+0

Harika yanıt. Teşekkürler – Ben

+0

hayatımı kurtardı! –

2

Bu sorgu, saklı yordamların metinsel tanımını ve basit bir joker karakterini kullanarak filtreyi geri alacaktır.

2000 için

(denenmemiş, ama IIRC bunun doğru masadır): 2005 yılı için

select p.[type] 
     ,p.[name] 
     ,c.[text] 
    from sysobjects p 
    join syscomments c 
    on p.object_id = c.id 
where p.[type] = 'P' 
    and c.[text] like '%foo%' 

: SQL Server 2005 için

2005 yılı için
select p.[type] 
     ,p.[name] 
     ,c.[text] 
    from sys.objects p 
    join sys.syscomments c 
    on p.object_id = c.id 
where p.[type] = 'P' 
    and c.[text] like '%foo%' 

ve 2008+

select p.[type] 
     ,p.[name] 
     ,c.[definition] 
    from sys.objects p 
    join sys.sql_modules c 
    on p.object_id = c.object_id 
where p.[type] = 'P' 
    and c.[definition] like '%foo%' 
+1

'sys.syscomments', 4,000 karakter topluluğuna kadar uzun tanımları böldüğünden, bunun için kullanılmamalı, böylelikle yığın sınırlarını aşan eşlemeleri kaçırabilirsiniz. –

6

/2008:

1

0 .. Bu sadece bir deyim sorununuzu çözebilir

SELECT OBJECT_DEFINITION(OBJECT_ID(N'dbo.myStoredProc')) 

veya

SELECT @objname= OBJECT_DEFINITION(OBJECT_ID(N'dbo.myStoredProc')) 
print @objname 
İlgili konular