在SQL Server数据库中,我需要查找包含对其他数据库的引用的所有存储过程和视图。 (我需要用同义词替换它们。)
我有很多存储过程,我不想手动搜索它们。
任何想法如何轻松找到它们?
答案 0 :(得分:4)
根据SQL Server的版本,您可能还会在此查询中找到值:
SELECT OBJECT_SCHEMA_NAME(referencing_id), OBJECT_NAME(referencing_id)
FROM sys.sql_expression_dependencies
WHERE referenced_database_name = 'YourDatabaseName';
实际上你需要一个搜索视图和程序的组合(如@M_M所指出的),这个,你可能需要清除一些。例如,如果您的数据库名称是由于其他原因可能在模块中自然出现的字符串,则sys.sql_modules将显示误报。但是,例如,当嵌入动态SQL时,这个答案将找不到数据库名称。
答案 1 :(得分:2)
有几种方法,但我发现一个好的起点是搜索sql_modules
表:
SELECT OBJECT_NAME([object_id]), [definition]
FROM sys.sql_modules
WHERE definition like '%MyOtherDBName%'