在准备将服务器场迁移到云中时,我试图列举多年来定义的所有链接服务器。我还需要找到(并更正)引用这些链接服务器的代码。
这是我一起扔的东西,以帮助识别引用链接服务器的对象的名称,但这仅适用于存储的过程、视图、函数和触发器:
declare @sql varchar(2000)
select @SQL = 'use ?;
print ''?'';
print replicate(''-'',len(''?''));
print '' '';
select object_name(sc.id)
from syscomments sc
where text like ''%TheLinkedServer%''
'
exec sp_msforeachdb @sql
我知道我将不得不打开 DTS/SSIS 包......我只是想尽快完成尽可能多的工作。
要查询工作,您只需要查看
msdb
的工作表:syscomments 也是一个向后兼容性视图 - 它不是在对象中搜索引用的最佳方式,特别是因为任何大于 4000 个字符的对象都将存储在多行中,并且可能会使链接服务器名称跨越两行。更安全的是:
最后, sp_msforeachdb 完全不可靠(请参阅此处和此处以获得更好的替代品)。
这是我去年编写的一个方便的搜索程序,可能有用:
它依赖于像这样的拆分功能(或者您自己的,如果您已经拥有一个,或者更好的是,
STRING_SPLIT()
如果您使用的是 SQL Server 2016 或更高版本并且可以处理其限制):如果您知道自己在搜索什么,Red Gate 有一个非常好的免费搜索工具,称为 SQL Search,它是 SSMS 的插件。与我在查看 syscomments 时所做的任何尝试相比,它更容易且更不容易出错。试一试。在这里下载。
在工作中搜索引用时,请确保在搜索中包含 msdb。
如果要直接查询 SQL 代理作业,则可以使用: