Muszę znaleźć wszystkie widoki i procedury składowane, które zużywają nie tylko określoną tabelę, ale określoną kolumnę w tabeli.
Następujące „wydaje się” działać, ale istnieje wiele ostrzeżeń, aby zachować ostrożność przy tej metodzie (nie są wiarygodne z różnych powodów, wkrótce będą przestarzałe itp.):
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
Niektóre alternatywne podejścia, do których często się odwołuje, to sys.sql_dependencies i sys.sql_expression_dependencies, ale żadne z nich nie ma ziarnistości na poziomie kolumny.
Czy ktoś wie, jak to zrobić? (Lub nawet jeśli definitywnie wiesz, że dosłownie nie można tego zrobić, dobrze byłoby wiedzieć).
sql-server
tbone
źródło
źródło
Odpowiedzi:
Oto przykład AdventureWorks dotyczący wyświetlania zależności między kolumnami.
źródło
where
warunek. TS chciał znaleźć zależności od konkretnej kolumny. Myślę, że warunek powinien być ograniczonyc.name
ied.referenced_id
/ed.referenced_entity_name
nie, prawda?sys.sql_dependencies
jest teraz w trybie konserwacji, a zespół Microsoft zaleca używanie tylkosys.sql_expression_dependencies
. To powiedziawszy - nie wygląda to nasys.sql_expression_dependencies
uchwycenie tego samego poziomu szczegółowości.