[SQL] 특정 테이블을 참조하는 모든 저장 프로 시저를 식별하는 방법
SQL특정 테이블을 참조하는 모든 저장 프로 시저를 식별하는 방법
나는 목적을 테스트하기위한 개발 환경에 테이블을 생성하고이 테이블을 refreing하는 몇 SP의의가있다. 지금은 물론이 테이블을 참조하는 모든 SP의의를 식별이 표를 삭제해야했다. 나는 모든 SP의 목록을 찾아 어려움에 직면하고있다. 테이블 이름은 'X'이고 데이터베이스가 SQL 서버 2005이라고 가정하여 일부 쿼리를 제안하십시오.
해결법
-
==============================
1.
SELECT Name FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%TableNameOrWhatever%'
BTW - 여기에 질문의 유형에 대한 유용한 자원이다 : SQL Server 시스템 카탈로그 FAQ를 쿼리
-
==============================
2.SQL2008에 이상 다음 작품. 저장 프로 시저 및 함수 모두의 목록을 제공합니다.
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
-
==============================
3.때때로 위의 쿼리가 올바른 결과를 제공하지 않습니다, 같은 테이블 종속성을 취득 할 수 저장 프로 시저가 내장되어 있습니다 :
때때로 위의 쿼리가 올바른 결과를 제공하지 않습니다, 같은 테이블 종속성을 취득 할 수 저장 프로 시저가 내장되어 있습니다 :
EXEC sp_depends @objname = N'TableName';
-
==============================
4.비 쿼리 방법은 SQL Server Management Studio를 사용하는 것입니다.
비 쿼리 방법은 SQL Server Management Studio를 사용하는 것입니다.
테이블을 마우스 오른쪽 클릭을 찾아 "보기 의존성"을 선택합니다.
편집하다
덧글 말한대로하지만, 그것은 매우 신뢰할 수 없습니다.
-
==============================
5.다음 쿼리는 모든 저장 프로 시저의 이름과 그 SP 년대의 해당 정의를 가져옵니다
다음 쿼리는 모든 저장 프로 시저의 이름과 그 SP 년대의 해당 정의를 가져옵니다
select so.name, text from sysobjects so, syscomments sc where so.id = sc.id and UPPER(text) like '%<TABLE NAME>%'
-
==============================
6.
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_2"라는 이름의 테이블이 있고 "테스트"와 SP를 검색하려고하면 예를 들어, 당신은 모두 결과를 얻을 수 있습니다.
-
==============================
7.열에 사람들을 테이블에 종속성을 검색하고뿐만 아니라 작품 아래의 쿼리 :
열에 사람들을 테이블에 종속성을 검색하고뿐만 아니라 작품 아래의 쿼리 :
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
-
==============================
8.
SELECT DISTINCT OBJECT_NAME(OBJECT_ID), object_definition(OBJECT_ID) FROM sys.Procedures WHERE object_definition(OBJECT_ID) LIKE '%' + 'table_name' + '%' GO
당신이 테이블 이름을 언급해야하는 경우이 작동합니다.
-
==============================
9.관리 스튜디오에서 당신은 바로 테이블을 클릭하고 '보기 종속성'에 클릭
관리 스튜디오에서 당신은 바로 테이블을 클릭하고 '보기 종속성'에 클릭
당신은 당신의 테이블 종속성이 객체의 목록을 볼 수있는 것보다 :
-
==============================
10.당신은 기본적으로 2 가지 옵션이 있습니다 :
당신은 기본적으로 2 가지 옵션이 있습니다 :
----옵션 1
SELECT DISTINCT so.name FROM syscomments sc INNER JOIN sysobjects so ON sc.id=so.id WHERE sc.TEXT LIKE '%tablename%'
---- 옵션 2
SELECT DISTINCT o.name, o.xtype FROM syscomments c INNER JOIN sysobjects o ON c.id=o.id WHERE c.TEXT LIKE '%tablename%'
이 두 쿼리는 당신에게 당신이 원하는 테이블을 참조하는 모든 저장 프로 시저를 받게됩니다. 이 쿼리는 sysobjects의 및 한 syscomments있는 2 SYS 테이블에 의존합니다. 당신의 DB의 모든 오브젝트 이름이 저장 프로 시저가 포함되어 저장되는 곳을 sysobjects입니다.
했고 syscomments은 절차의 모든 텍스트가 포함되어 있습니다.
당신이 쿼리 경우 : syscomments의 SELECT * FROM
당신은 마지막 열로 저장 프로 시저에 포함 된 텍스트와 sysobjects의 테이블에 매핑 ID를 포함하는 테이블을해야합니다.
-
==============================
11.이 시도
이 시도
SELECT DISTINCT so.name FROM syscomments sc INNER JOIN sysobjects so ON sc.id=so.id WHERE sc.TEXT LIKE '%your table name%'
from https://stackoverflow.com/questions/7272157/how-to-identify-all-stored-procedures-referring-a-particular-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 이동 세포는 왼쪽이 null이 포함 된 경우 SQL에서 왼쪽과 오른쪽 값을 포함 (0) | 2020.06.18 |
---|---|
[SQL] SQL의 평균을 반올림 때 어떻게 소수를 검색 할 (0) | 2020.06.17 |
[SQL] 여러 행으로 분할 문자열 (0) | 2020.06.17 |
[SQL] SQLAlchemy의 통하여 실행될 때 검색 결과를 산출하지 테라 MERGE (0) | 2020.06.17 |
[SQL] 오라클 문자열 집계 (0) | 2020.06.17 |