[sql] 특정 테이블을 참조하는 모든 저장 프로 시저를 식별하는 방법

테스트 목적으로 개발 환경에 테이블을 만들었으며이 테이블을 권장하는 sp가 거의 없습니다. 이제이 테이블을 삭제 하고이 테이블을 참조하는 모든 sp를 식별해야합니다. 모든 sp의 목록을 찾기가 어렵습니다. 테이블 이름이 ‘x’이고 데이터베이스가 SQL Server 2005라고 가정하여 쿼리를 제안하십시오.



답변

SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'

BTW-다음은 이러한 유형의 질문에 대한 유용한 리소스입니다 . SQL Server 시스템 카탈로그 쿼리 FAQ


답변

다음은 SQL2008 이상에서 작동합니다. 저장 프로 시저 및 함수 목록을 제공합니다.

select distinct [Table Name] = o.Name, [Found In] = sp.Name, sp.type_desc
  from sys.objects o inner join sys.sql_expression_dependencies  sd on o.object_id = sd.referenced_id
                inner join sys.objects sp on sd.referencing_id = sp.object_id
                    and sp.type in ('P', 'FN')
  where o.name = 'YourTableName'
  order by sp.Name


답변

때때로 위의 쿼리는 올바른 결과를 제공하지 않으며 다음과 같이 테이블 종속성을 얻는 데 사용할 수있는 내장 프로 시저가 있습니다.

EXEC sp_depends @objname = N'TableName';


답변

쿼리가 아닌 방법은 Sql Server Management Studio를 사용하는 것입니다.

테이블을 찾아 마우스 오른쪽 단추로 클릭하고 “종속성보기”를 선택하십시오.

편집하다

그러나 논평자들이 말했듯이, 그것은 신뢰할 만하지 않습니다.


답변

다음 쿼리는 모든 저장 프로 시저 이름과 해당 SP의 해당 정의를 가져옵니다.

select
   so.name,
   text
from
   sysobjects so,
   syscomments sc
where
   so.id = sc.id
   and UPPER(text) like '%<TABLE NAME>%'


답변

SELECT
    o.name
FROM
    sys.sql_modules sm
INNER JOIN sys.objects o ON
    o.object_id = sm.object_id
WHERE
    sm.definition LIKE '%<table name>%'

이로 인해 테이블 ​​이름이 주석에 있거나 테이블 이름이 사용중인 다른 테이블 이름의 하위 문자열 인 SP도 나타납니다. 예를 들어 이름이 “test”및 “test_2″인 테이블이 있고 “test”를 사용하여 SP를 검색하려고하면 둘 다에 대한 결과가 표시됩니다.


답변

아래 쿼리는 열에 대한 종속성이 아닌 테이블에 대한 종속성을 검색 할 때만 작동합니다.

EXEC sp_depends @objname = N'TableName';

그러나 모든 종류의 종속성을 검색하려는 경우 다음 쿼리가 가장 좋습니다. 실제로 필요한 것보다 많은 정보를 제공합니다.

 select distinct
        so.name
        --, text 
  from
       sysobjects so,
       syscomments sc
  where
     so.id = sc.id
     and lower(text) like '%organizationtypeid%'
  order by so.name