6

테이블에 항목을 만드는 저장 프로 시저를 찾는 방법이 있습니까? 예를 들어 말 :특정 테이블에 삽입하는 저장 프로 시저 찾기

저장 프로 시저 A는 표 A에 삽입
저장 표 A에 Proceudre B 삽입
저장 표 B에 절차 C 삽입

내가 저장 프로 시저의 이름을 반환하는 쿼리에 원하는 A 및 저장 프로 시저 B.

필자는 이것을 지금 받았지만 저장 프로 시저 만 찾으면됩니다. 저장 프로 시저를 찾는 것이 좋은 출발점이 될 것이라고 생각합니다.

SELECT OBJECT_NAME(object_id) 
FROM sys.sql_modules 
WHERE definition LIKE '%TablenameIWanttoFind%' 

당신이 당신이 검색 할 수있는 표현의 특정 경우 :

 

select schema_name(schema_id) as [schema], 
     name 
from sys.procedures 
where name like '%Item%' and name like '%Create%' 
 

나는 2008

답변

9

당신은 모든 프록 및 뷰의 텍스트를 포함 sys.sql_modules를 검색 할 수있는 Microsoft SQL을 사용하고 있습니다 something like 'INSERT INTO mytable'

+0

+1'sys.sql_modules'는 저장 프로 시저 (** NVARCHAR (4000) 대신)의 ** 전체 ** 정의가있는 유일한보기이므로 실제로 유일한 옵션입니다. 이 경우에 사용 – Lamak

+0

굉장한 감사합니다. 예를 들어 저장 프로 시저가 암호화되어 있다고 가정 해보십시오. 이 기능은 여전히 ​​검색 할 수 있습니까? – user489041

+0

@user - 확실하지는 않지만 결코 시도하지 않았습니다. 그것은 그렇지 않을 가능성이 있습니다. – JNK

1

아래의 쿼리를 사용하지 않는 이유는 무엇입니까?

select O.name from sysobjects O 
Join Syscomments C 
on O.id=C.id 
Where C.text like '%insert into%Table_name%' 

이 쿼리에서 문자 그대로 특정 텍스트가있는 프로 시저를 찾을 수 있습니다.

0

질문은 을 특정 테이블에 삽입하는 저장 프로 시저를 찾는 방법을 묻습니다.

이름이 들어있는 저장 프로 시저를 검색하면 테이블이 여러 선택 항목에 대해 참조되는 경우 오탐 (false positive)이 발생할 수 있습니다.

sys.sql_dependencies은 더 이상 사용되지 않지만 여기에는 플래그가 포함되어 있으며 여기에는 삽입시 1 플래그가 설정되어있어 유용 할 수 있습니다.

SELECT QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' + QUOTENAME(OBJECT_NAME(object_id)) 
FROM sys.sql_dependencies 
WHERE referenced_major_id = OBJECT_ID('YourTable') 
     AND is_updated = 1 
GROUP BY object_id