특정 열에 대한 종속성 찾기 (sysdepends를 사용하지 않고 현대적인 방법)


14

특정 테이블뿐만 아니라 테이블의 특정 열을 사용하는 모든 뷰 및 저장 프로 시저를 찾아야합니다.

다음은 작동하는 것으로 간주되지만이 방법에주의해야 할 경고는 여러 가지가 있습니다 (다양한 이유로 신뢰할 수없고 곧 폐기 될 예정 임).

SELECT object_name(so.id) TableName, sc.name ColumnName, OBJECT_NAME(sd.id) DependentObjectName,
(SELECT xtype FROM sysobjects so WHERE so.id = sd.id) Object_Type
FROM sysobjects so INNER JOIN syscolumns sc
ON so.id = sc.id
INNER JOIN sysdepends sd
ON so.id = sd.depid and sc.colid = sd.depnumber
WHERE 
    object_name(so.id) = 'MyTableName'
AND sc.name = 'MyColumnName'
order by object_name(so.id), Object_Type

종종 참조되는 일부 대체 방법은 sys.sql_dependencies 및 sys.sql_expression_dependencies이지만이 중 어느 것도 열 수준 세분성을 갖지 않습니다.

누구든지 이것을하는 방법을 알고 있습니까? (또는 문자 그대로 할 수 없다는 것을 확실히 알고 있더라도 알아두면 도움이 될 것입니다.)


1
이 팁의 예 2는 열 수준 검색을위한 것입니다.

답변:


13

다음은 열 종속성을 보는 AdventureWorks 예입니다.

SELECT ReferencingObject = SCHEMA_NAME(o1.schema_id) + '.' + o1.name,
       ReferencedObject = SCHEMA_NAME(o2.schema_id) + '.'
                          + ed.referenced_entity_name,
       ColumnName = c.name,
       ReferencedObjectType = o2.type,
       ReferencingObjecType = o1.type
FROM   AdventureWorks2012.sys.sql_expression_dependencies ed
       INNER JOIN AdventureWorks2012.sys.objects o1
               ON ed.referencing_id = o1.object_id
       INNER JOIN AdventureWorks2012.sys.objects o2
               ON ed.referenced_id = o2.object_id
       INNER JOIN AdventureWorks2012.sys.sql_dependencies d
               ON ed.referencing_id = d.object_id
                  AND d.referenced_major_id = ed.referenced_id
       INNER JOIN sys.columns c
               ON c.object_id = ed.referenced_id
                  AND d.referenced_minor_id = c.column_id
WHERE  SCHEMA_NAME(o1.schema_id) + '.' + o1.name = 'HumanResources.vEmployee' AND c.name = 'JobTitle'
ORDER  BY ReferencedObject,
          c.column_id; 

이것은 훌륭해 보인다. 이 AT ALL 또는 POSSIBLY가 sysdepends와 동일한 "stale, old"문제를 겪고 있는지에 대해 언급 할 수 있습니까? 참조 : sqlblog.com/blogs/aaron_bertrand/archive/2008/09/09/…
tbone

또한 : 이것이 중첩 된 종속성을 해결할 것인지 생각하십니까? 즉, PROD는 TABLE.COLUMN에 의존하는 VIEW에 의존합니다. TABLE & COLUMN에 기준을 설정하면 뷰 proc 가 모두 결과에 표시됩니까?
tbone

where조건 에 따라 어떤 목적이 제공되는지 이해하지 못합니다 . TS는 특정 열에서 의존성을 찾기를 원했습니다. 나는 조건이 제약되어야한다고 생각 c.name하고 ed.referenced_id/ ed.referenced_entity_name, 그렇지 않아야합니까?
pkuderov

2019 년 sys.sql_dependencies에는 현재 유지 관리 모드에 있으며 Microsoft 팀은 sys.sql_expression_dependencies. 그것은 sys.sql_expression_dependencies같은 수준의 세부 사항을 포착하는 것처럼 보이지 않습니다 .
10762409는 다음과 같이 말합니다 : Reinstate Monica
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.