查找使用链接服务器的所有视图

时间:2012-08-02 02:01:59

标签: sql-server tsql

我正在更新链接服务器的网址。在进行更改之前,我想知道所有引用此链接服务器的视图。是否有任何编程方式(TSQL)来执行此任务?

感谢您的帮助。

我正在使用SQL Server 2005,2008和2012.引用链接服务器的数据库服务器主要是SQL Server 2005

4 个答案:

答案 0 :(得分:5)

虽然它可能会返回误报,并且不会捕获使用动态SQL构造四部分名称的任何情况,但这可能是最简单的方法:

SELECT name FROM sys.views
WHERE LOWER(OBJECT_DEFINITION([object_id])) LIKE LOWER('%LinkedServerName%');

答案 1 :(得分:2)

如果您需要按名称查找数据库对象(例如表格,列,触发器) - 请查看名为SQL Search免费红门工具,它会执行此操作 - 它会搜索您的整个数据库中的任何类型的字符串。

enter image description here

enter image description here

对于任何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.%'