2011-10-07 3 views
17

레거시 데이터베이스 시스템을 탐색 중이며 내부에 대한 지식이 거의 없습니다. 나는 다른 저장 프로 시저 A을 호출하는 모든 저장 프로 시저를 찾고 싶습니다.SQL Server의 저장 프로 시저 내용 쿼리

가장 적합한 방법은?

나는이 의사 코드 같은 것을 쓸 수 :

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

Asp.TextualContent는 SP에 포함 된 실제 SQL을 의미합니다.

+0

SQL 서버의 버전은 무엇을하려고? –

+0

SQL Server 2005 – Ben

답변

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

굉장한 응답입니다. 감사합니다 – Ben

+0

내 생명을 구했어! –

2

이 쿼리는 간단한 와일드 카드를 사용하여 저장 프로 시저 및 필터의 텍스트 정의를 검색합니다.

2000

(테스트되지 않은,하지만 IIRC 그것은 바로 테이블의) : 2005에 대한

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 서버 2005에 대한

2005에 대한
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%' 

및 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 개의 문자 덩어리로 나눠서 덩어리 경계를 넘는 일치를 놓칠 수 있으므로 이것을 위해 사용하면 안됩니다. –

6

은/2008 :

1

0 ..이 하나의 문이 문제를 해결할 수

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

또는

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