我负责将数据库从 ServerA 移动到 ServerB 的任务。ServerB 包含许多其他数据库对象,其中相当一部分使用与 ServerA 的 Linked Server 连接。例如,可能有一个视图将 ServerB 上的 table1 连接到 ServerA.database.schema.table1
有谁知道我可以在 ServerB 上运行的脚本,它将显示引用 ServerA 的所有对象的列表,以便我可以快速更新它们,而无需打开每个对象。
我希望这是有道理的。谢谢
我负责将数据库从 ServerA 移动到 ServerB 的任务。ServerB 包含许多其他数据库对象,其中相当一部分使用与 ServerA 的 Linked Server 连接。例如,可能有一个视图将 ServerB 上的 table1 连接到 ServerA.database.schema.table1
有谁知道我可以在 ServerB 上运行的脚本,它将显示引用 ServerA 的所有对象的列表,以便我可以快速更新它们,而无需打开每个对象。
我希望这是有道理的。谢谢
这可能会导致误报,但这可能比依赖依赖视图更好(它会错过动态 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 '\';