我有一个选择语句我想同时针对多个数据库运行:
select LastName from TABLE where LastName like '%eloph'
我想要选择的所有数据库都包含相同的表,结构相同,但有超过300个。如何避免写相同的查询300次?
答案 0 :(得分:2)
您只需将数据库名称附加到表名称前面即可。如果您希望将所有数据作为一个结果集返回,请使用UNION ALL
附加结果
Select LastName from dbname1.dbo.TABLE where LastName like '%eloph'
UNION ALL
Select LastName from dbname2.dbo.TABLE where LastName like '%eloph'
UNION ALL
Select LastName from dbname3.dbo.TABLE where LastName like '%eloph'
UNION ALL
Select LastName from dbname4.dbo.TABLE where LastName like '%eloph'
继续添加Union all和select语句。
或者如果你不喜欢编辑,这应该会产生你需要的大部分内容。
它将为您生成sql,只需复制它并删除最后一个UNION ALL
SELECT 'Select LastName from ' + name + '.dbo.TABLE where LastName like ''%eloph''
UNION ALL '
FROM sys.databases
请注意加倍的单引号
答案 1 :(得分:0)
尝试一下:
DECLARE @sql varchar(1000)
SELECT @sql = 'Select 1'
EXEC sp_MSforeachdb @sql