我正在更新链接服务器的 url。在进行更改之前,我想知道所有引用此链接服务器的视图。是否有任何编程方式(TSQL)来执行此任务?
谢谢你的帮助。
我使用的是 SQL Server 2005、2008 和 2012。引用链接服务器的数据库服务器大多是 SQL Server 2005
我正在更新链接服务器的 url。在进行更改之前,我想知道所有引用此链接服务器的视图。是否有任何编程方式(TSQL)来执行此任务?
谢谢你的帮助。
我使用的是 SQL Server 2005、2008 和 2012。引用链接服务器的数据库服务器大多是 SQL Server 2005
虽然它可能会返回误报,并且不会捕获使用动态 SQL 构造四部分名称的任何情况,但这可能是最简单的方法:
SELECT name FROM sys.views
WHERE LOWER(OBJECT_DEFINITION([object_id])) LIKE LOWER('%LinkedServerName%');
这将找到视图:
SELECT t2.name, OBJECT_DEFINITION(t1.[object_id]) view_definition
FROM sys.views t1 join sys.servers t2 on
OBJECT_DEFINITION(t1.[object_id]) like '%['+ t2.name + '].%' ESCAPE '['
如果表、视图、模式或数据库与链接服务器同名,它可能会失败。
如果某些视图没有通过第一次检查,您可以添加此行,这部分不会检查链接服务器名称周围的方括号。但请注意,这部分更有可能包含额外的不需要的视图
or OBJECT_DEFINITION(t1.[object_id]) like '% '+ t2.name + '.%'
编辑:将 sys.sysservers 更改为 sys.servers。谢谢亚伦伯特兰
如果您需要按名称查找数据库对象(例如表、列、触发器) - 请查看名为SQL Search的免费Red-Gate 工具,它会在您的整个数据库中搜索任何类型的字符串。
对于任何 DBA 或数据库开发人员来说,它都是一个很棒的必备工具——我是否已经提到它完全免费用于任何用途?
尝试这个:
SELECT name, OBJECT_DEFINITION([object_id]) FROM sys.views
where OBJECT_DEFINITION([object_id]) like '%.%.dbo.%'