我有一些标准的sql,我在一台服务器上运行多个数据库,以帮助我诊断问题:
select so.name,so.type,MAX(case when sc.text like '%remote%' then '' ELSE 'N' END) AS Relevant,@@ServerName as Server,DB_Name() as dbname from sysobjects so with (nolock) join syscomments sc with (nolock) on so.id = sc.id where (sc.text like '%emote%') group by so.name,so.type order by so.type,so.name
解决方法
sp_MSForEachDB
一个选项是sp_MSForEachDB.它没有文档但仍然有用
DECLARE @command varchar(1000) SELECT @command = 'USE [?] UPDATE Table1 SET Field1 = ''ninjas'' WHERE Field2 = ''pirates''' EXEC sp_MSforeachdb @command
对互联网的搜索也有更多的例子
注意:作为一个不受支持的功能(有一些已知的错误)你可能想写自己的version(感谢@Pradeep)
上面的sql示例需要重构为:
DECLARE @findKeysql nvarchar(2000) DECLARE @searchKey nvarchar(20) SET @searchKey = lower('%remote%') SET @findKeysql = 'IF ''[?]'' NOT IN (''[master]'',''[model]'',''[msdb]'',''[tempdb]'') select so.name,''?'' as dbname from [?].dbo.sysobjects so with (nolock) join [?].sys.all_sql_modules sc with (nolock) on so.id = sc.object_id where (lower(sc.deFinition) like ''' + @searchKey + ''') group by so.name,so.type order by so.type,so.name' EXEC sp_MSForEachDB @findKeysql
笔记:
>?在查询中被替换为数据库名称,所以结构查询以明确定义哪个DB它是查询>修改为使用sys.all_sql_modules作为保存完整的模块文本(syscomments可以在到达跨越行时分割关键字)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。