Я создаю sp для проверки устаревших столбцов, используемых в объектах данной базы данных и использующих sys.sql_dependencies
. Я проверил все, что мог, и не вижу, где я могу получить db_name
для столбца, который я ищу. Я просто хочу убедиться, что он правильный, в коде этот столбец с префиксом db_name.dbo.TableName
, поэтому я надеюсь, что он где-то хранится, но не в таблице dependencies
, я думаю.
Я знаю, что SYS таблицы специфичны для db_name, так что, может быть, в этом случае они недоступны? так что я могу получить ложное попадание в тот же table.column, но из другой базы данных.
Это мой пример кода, в данном случае я ищу dbNameAAA.table.column (или список их) в объектах другой базы данных (sp, udf, views, triggers и т. Д.)
SELECT TOP 10
'?????' db, -- for ro.name, c.name referenced
ro.name Tbl, c.name Col, ' -->' [_Found in_],
(SELECT DB_NAME()) db_current,
o.name ObjName, o.object_id, o.type_desc ObjType, SCHEMA_NAME(ro.schema_id) Sch_Name
FROM sys.sql_dependencies AS d
INNER JOIN sys.all_objects AS o ON o.object_id = d.object_id
INNER JOIN sys.all_objects AS ro ON ro.object_id = d.referenced_major_id
INNER JOIN sys.all_columns AS c ON c.object_id = ro.object_id AND c.column_id = d.referenced_minor_id
WHERE 1=1
and (c.name = 'Cust_ID')
AND o.type_desc LIKE '%procedure%'
Обновление и это c'be решение:
Здесь есть вся информация, даже имя сервера для ref'ed объекта, хотя у него нет имени столбца, но я думаю, что смогу решить его, объединив свои запросы.
SELECT TOP 10 OBJECT_NAME (referencing_id) Referencing_Obj, '--->' [uses],
referenced_Server_name,
referenced_database_name,
referenced_schema_name,
referenced_entity_name,
'???' referenced_column_name
FROM sys.sql_expression_dependencies d
WHERE OBJECT_NAME(referencing_id) = 'sp_My_sp'