2

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

谢谢你的帮助。

我使用的是 SQL Server 2005、2008 和 2012。引用链接服务器的数据库服务器大多是 SQL Server 2005

4

4 回答 4

5

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

SELECT name FROM sys.views
WHERE LOWER(OBJECT_DEFINITION([object_id])) LIKE LOWER('%LinkedServerName%');
于 2012-08-02T02:37:53.960 回答
3

这将找到视图:

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。谢谢亚伦伯特兰

于 2012-08-02T14:39:53.867 回答
2

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

在此处输入图像描述

在此处输入图像描述

对于任何 DBA 或数据库开发人员来说,它都是一个很棒的必备工具——我是否已经提到它完全免费用于任何用途?

于 2012-08-02T04:52:02.660 回答
-1

尝试这个:

SELECT name, OBJECT_DEFINITION([object_id]) FROM sys.views
where OBJECT_DEFINITION([object_id]) like '%.%.dbo.%'
于 2012-08-02T05:36:59.873 回答