3

在 SQL Server 数据库中,我需要找到所有包含对其他数据库的引用的存储过程和视图。(我需要用同义词替换它们。)

我有很多存储过程,我不想手动搜索它们。

任何想法如何轻松找到它们?

4

2 回答 2

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 中时,这个答案将找不到数据库名称。

于 2012-06-06T14:48:32.483 回答
3

有几种方法,但我发现搜索sql_modules表格是一个不错的起点:

SELECT OBJECT_NAME([object_id]), [definition]
FROM sys.sql_modules 
WHERE definition like '%MyOtherDBName%'
于 2012-06-06T14:42:20.047 回答