저장된 절차의 영향을받는 테이블 목록을 어떻게 얻습니까?
-
02-07-2019 - |
문제
약 100 개의 테이블과 약 250 개의 저장 절차가있는 거대한 데이터베이스가 있습니다. 저장된 절차의 하위 집합의 영향을받는 테이블 목록을 알고 싶습니다. 예를 들어, 250 명 중 50 개의 저장된 절차 목록이 있으며이 50 개의 저장된 절차의 영향을받을 테이블 목록을 알고 싶습니다. 저장된 모든 절차를 읽고 수동으로 테이블 목록을 찾는 것 외에이 작업을 수행하는 쉬운 방법이 있습니까?
추신 :이를 위해 SQL Server 2000 및 SQL Server 2005 클라이언트를 사용하고 있습니다.
해결책
이것은 SQL 서버 쿼리입니다.
SELECT
[NAME]
FROM
sysobjects
WHERE
xType = 'U' AND --specifies a user table object
id in
(
SELECT
sd.depid
FROM
sysobjects so,
sysdepends sd
WHERE
so.name = 'NameOfStoredProcedure' AND
sd.id = so.id
)
이것이 누군가를 돕기를 바랍니다.
다른 팁
sp_ddependes 'StoredProcName' 저장된 Proc가 의존하는 객체 이름과 객체 유형을 반환합니다.
편집하다: 나는 @kg의 대답을 더 좋아합니다. 더 유연한 IMHO.
나는 SQL 2005에서 이런 식으로 할 것입니다 (무례한 "및"특정 Proc에 대해서만 원한다면 라인) :
SELECT
[Proc] = SCHEMA_NAME(p.schema_id) + '.' + p.name,
[Table] = SCHEMA_NAME(t.schema_id) + '.' + t.name,
[Column] = c.name,
d.is_selected,
d.is_updated
FROM sys.procedures p
INNER JOIN sys.sql_dependencies d
ON d.object_id = p.object_id
AND d.class IN (0,1)
INNER JOIN sys.tables t
ON t.object_id = d.referenced_major_id
INNER JOIN sys.columns c
ON c.object_id = t.object_id
AND c.column_id = d.referenced_minor_id
WHERE p.type IN ('P')
-- AND p.object_id = OBJECT_ID('MyProc')
ORDER BY
1, 2, 3
매우 침습적 인 옵션 중 하나는 중복 데이터베이스를 가져 와서 무언가가 발생한 로그를 기록한 모든 테이블에 트리거를 설정하는 것입니다. 그런 다음 모든 SP를 실행하십시오. 작동하지 않는 DB에 많은 개조를 할 수 없다면
또한 트리거를 통해 SP의 영향을받는 테이블을 원한다면 로깅을 로깅으로 바꾸지 않고 기존 트리거에 로깅을 추가하십시오.
제휴하지 않습니다 StackOverflow