SQL Server 2008 R2에서 테이블을 사용하는 저장 프로시 저나 트리거를 어떻게 알 수 있습니까?


9

이것은 내가 확인하는 DB에 사용자 기록을 유지하는 아카이브 테이블이 있고, 시간이 지나면이 테이블에서 행을 삭제하는 트리거 또는 저장 절차가 있기 때문에 동일하게, 나는 DB를 설계하지 않았고,이 DB를 사용하는 응용 프로그램의 유지 보수를 취하고 있으므로이 저장 프로 시저 또는 트리거의 이름을 모릅니다.이 저장 프로 시저를 찾는 것입니다 또는 트리거 할 경우 코드를 확인하고 수정하여이 "사용자 기록"을 테이블에 더 오래 두십시오.

누군가가 "sysobjects"테이블을 확인하라고했는데 실제로 동일한 테이블 이름을 가진 것을 볼 수 있지만이 정보는 내가 검색 할 수있는 유일한 정보입니다.

감사합니다.

답변:


6

sys.sql_modules를 사용하여 모든 코드 검색

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

또는 완전 무료 인 Red Gate SQL Search 를 사용하십시오.

syscomments 또는 INFORMATION_SCHEMA.RUBBISH를 사용 하지 마십시오


동료가 대상 테이블을 마우스 오른쪽 단추로 클릭하고 "종속성 표시"(또는 해당 텍스트에 영향을주는 텍스트)를 누를 수 없습니까?
Nick Chammas

@Nick Chammas : 아뇨, 이것은 신뢰할 수없는 것으로 잘 알려져 있습니다
gbn

@gbn, syscomments는 이전 버전과의 호환성을위한 것이며 향후 릴리스에서 제거 될 수 있음을 이해하지만 INFORMATION_SCHEMA를 사용하지 않는 이유를 자세히 설명 할 수 있습니까? thx
datagod

@datagod : syscomments가 항상 잘못된 선택 인 이유와 동일합니다. 정의 열은 nvarchar (4000)입니다. 이것은 문자열 위치가> 4000이거나 nvarchar (4000) 행 사이의 경계에 걸쳐 있으면 테이블 참조를 놓칠 수 있음을 의미합니다 (처리 방법에 따라, 실제로 원한다면 추측 할 수 있습니다 ...
gbn

@gbn 실제로 syscomments4000 자 한도를 초과하는 객체에 대해 여러 행이 있으므로이를 사용하여 쿼리를 유효하게 sys.sql_modules합니다. sys.sql_modules그러나 나는 여전히 syscomments감가 상각되기를 권장 합니다.
Kenneth Fisher

4

ApexSQL 검색을 사용해보십시오

ApexSQL 검색은 무료 SQL Server Management Studio 및 Visual Studio 추가 기능으로, 다른 기능 중에서도 종속성보기 기능이 있습니다. 종속성보기 기능을 사용하면 암호화 된 개체와 시스템 개체, SQL Server 2012 특정 개체 및 TDE (투명한 데이터 암호화)로 암호화 된 데이터베이스에 저장된 개체를 비롯한 모든 SQL 데이터베이스 개체의 관계를 시각화 할 수 있습니다.

종속성보기 기능을 사용하면 표시 될 관계, 생성 된 다이어그램의 레이아웃 및 크기, 종속성의 드릴 다운 깊이를 포함하여 시각적 종속성 다이어그램 레이아웃을 설정하고 사용자 정의 할 수 있습니다.

면책 조항 : ApexSQL에서 지원 엔지니어로 일하고 있습니다.


2

2008 년 기준으로 나중에 참조 할 수있는 DMV도 있습니다. sys.dm_sql_referencing_entities. 나는 일반적으로 SQL_Modules를 사용하는 것을 선호합니다. 여기에서 논의 했지만 기본적으로 다음과 같은 코드가있는 경우 :

SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id) 
FROM sys.sql_modules WHERE [definition] LIKE '%ABC%'

결과적으로 테이블 ABC, 테이블 ABCLog 뷰 vw_ABC, 저장 프로 시저 sp_Update_ABC 등의 결과가 나타납니다. 또한 sql_modules 메소드는 암호화되지 않은 SP에서만 작동하는 동안 DMV는 암호화 된 SP 및 암호화되지 않은 SP를 처리합니다. .

동일한 쿼리의 DMV 버전은 다음과 같습니다.

SELECT * FROM sys.dm_sql_referencing_entities('dbo.ABC', 'OBJECT')

1

또한 sys.sql_expression_dependencies 카탈로그 뷰를 사용할 수 있습니다. 이 쿼리를 사용하십시오.

SELECT 
referencing_object_name = obj.name, 
referencing_object_type_desc = obj.type_desc, 
referenced_object_name = referenced_entity_name
FROM sys.sql_expression_dependencies sd 
INNER JOIN sys.objects obj 
ON sd.referencing_id = obj.[object_id] 
WHERE referenced_entity_name = 'MyTable'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.