sql-server – 如何对服务器上的所有数据库执行SQL
发布时间:2020-12-26 14:35:59 所属栏目:MsSql教程 来源:网络整理
导读:我有一些标准的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
我有一些标准的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可以在到达跨越行时分割关键字) (编辑:开发网_商丘站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 唯一索引,varchar列和(空格)空格的行为
- 互动百科拟启用新域名(HuDong.com)
- sql – 如何组合来自两个存储过程调用的结果集?
- sql-server – 如何级联删除多对多表
- 怎样查察某个查询用了几多TempDB空间
- sql-server – 如何创建一系列连接稀疏数据的月份?
- sql-server – Sequence – NO CACHE vs CACHE 1
- 时尚边缘,小巧玲珑的诱惑——BenQ FP556s上市
- sql-server – 在同一个VM上运行2个SQL Server 2014实例是否
- sql-server – 在我的本地计算机上通过SQL Server Manageme