我有一个数据库列表,比如说数据库1,数据库2,数据库3'。等
目前我正在通过
查询结果select column1 from database1..tableA
union all
select column1 from database2..tableA
union all
select column1 from database3..tableA
使用sp_foreachdb或带有数据库列表的游标有更好的方法吗?
答案 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'')'