我已成功编写代码以动态地将多个数据库中的简单选择语句的结果联合起来。我想将数据库名称本身包含为一个字段,以便我可以识别每条记录。修改下面的代码以实现该目标的最佳方法是什么?在动态SQL中包含sys.databases名称作为列UNION
我现在的成绩看起来像
场2,字段3,字段4 B,C,d 2,3,4
我不能告诉哪个数据库包含行(B,C,d )来自。
而且我想确保我看到 字段1,字段2,字段3,字段4 First_DatabaseName,B,C,d Second_DatabaseName,2,3,4
和上面一样,然后我可以看到含(b,C,d)行来自First_Database
DECLARE @sql varchar(max)
SELECT @sql = ISNULL(@sql + 'union all ',' ') + ' SELECT * FROM ' + name + '.dbo.CombinedProvider '
FROM sys.databases
WHERE name in ('First_DatabaseName', 'Second_DatabaseName')
EXEC (@sql)
您是否需要使用Select *或可以显式列出每个数据库的列? – eabraham 2012-04-12 17:05:12
我可以从表格中明确列出我想要的每一列。我仅包含*用于示例目的,不会在生产查询中使用它。 – MSS 2012-04-12 17:28:46