如何使用游标在Union All中组合数据?

时间:2015-07-24 01:43:36

标签: sql sql-server

我有一个数据库列表,比如说数据库1,数据库2,数据库3'。等

目前我正在通过

查询结果
select column1 from database1..tableA
union all
select column1 from database2..tableA
union all 
select column1 from database3..tableA

使用sp_foreachdb或带有数据库列表的游标有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以从sys.databases查询数据库列表。然后使用动态SQL:

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql = @sql +
'UNION ALL SELECT column1 FROM ' + QUOTENAME(name) + '..tableA' + CHAR(10)
FROM sys.databases 
WHERE [name] NOT IN ('master', 'tempdb', 'model', 'msdb')

SELECT @sql = STUFF(@sql, 1, 10, '')

PRINT @sql
EXEC (@sql)

答案 1 :(得分:0)

正如Blorgbeard在上面评论的那样,如果你想要一个结果集,你所拥有的联盟就是你要走的路。但是如果你不想要一个结果集或想要使用sp_foreachdb,你可以尝试调整它:

EXEC sp_MSforeachdb 'USE ? SELECT OBJECT_NAME(object_Id) FROM sys.tables where DB_NAME() NOT IN(''master'', ''model'', ''msdb'', ''tempdb'')'