0

我负责将数据库从 ServerA 移动到 ServerB 的任务。ServerB 包含许多其他数据库对象,其中相当一部分使用与 ServerA 的 Linked Server 连接。例如,可能有一个视图将 ServerB 上的 table1 连接到 ServerA.database.schema.table1

有谁知道我可以在 ServerB 上运行的脚本,它将显示引用 ServerA 的所有对象的列表,以便我可以快速更新它们,而无需打开每个对象。

我希望这是有道理的。谢谢

4

1 回答 1

4

这可能会导致误报,但这可能比依赖依赖视图更好(它会错过动态 SQL 或只是过时的依赖):

SELECT 'EXEC sp_helptext ''' 
 + QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
 + '.' + QUOTENAME(OBJECT_NAME([object_id])) + ''';'
FROM sys.sql_modules
WHERE definition LIKE '%ServerA.%';

您可能还需要考虑服务器名称包含在方括号中的潜在情况:

OR definition LIKE '%\[ServerA\].%' ESCAPE '\';

您还应该考虑使用同义词来防止将来发生此类维护。事实上,您可能还想检查引用服务器名称的任何同义词:

SELECT name, base_object_name
  FROM sys.synonyms
  WHERE base_object_name LIKE 'ServerA.%'
  OR base_object_name LIKE '\[ServerA\].%' ESCAPE '\';
于 2012-06-26T16:00:35.850 回答