我正在更新链接服务器的网址。在进行更改之前,我想知道所有引用此链接服务器的视图。是否有任何编程方式(TSQL)来执行此任务?
感谢您的帮助。
我正在使用SQL Server 2005,2008和2012.引用链接服务器的数据库服务器主要是SQL Server 2005
答案 0 :(得分:5)
虽然它可能会返回误报,并且不会捕获使用动态SQL构造四部分名称的任何情况,但这可能是最简单的方法:
SELECT name FROM sys.views
WHERE LOWER(OBJECT_DEFINITION([object_id])) LIKE LOWER('%LinkedServerName%');
答案 1 :(得分:2)
如果您需要按名称查找数据库对象(例如表格,列,触发器) - 请查看名为SQL Search的免费红门工具,它会执行此操作 - 它会搜索您的整个数据库中的任何类型的字符串。
对于任何DBA或数据库开发人员来说,这是一个非常必备的工具 - 我是否已经提到它绝对免费用于任何用途?
答案 2 :(得分:2)
这将找到意见:
SELECT t2.srvname, OBJECT_DEFINITION(t1.[object_id]) view_definition
FROM sys.views t1 join sys.servers t2 on
OBJECT_DEFINITION(t1.[object_id]) like '%['+ t2.srvname + '].%' ESCAPE '['
如果表,视图,架构或数据库与链接服务器具有相同的名称,则可能会失败。
如果某些视图已经避开第一次检查,您可以添加此行,此部分不会检查链接服务器名称周围的方括号。但请注意,这部分更有可能包括在内 额外的不受欢迎的观点
or OBJECT_DEFINITION(t1.[object_id]) like '% '+ t2.srvname + '.%'
编辑:将sys.sysservers更改为sys.servers。谢谢Aaron Bertrand
答案 3 :(得分:-1)
试试这个:
SELECT name, OBJECT_DEFINITION([object_id]) FROM sys.views
where OBJECT_DEFINITION([object_id]) like '%.%.dbo.%'