在每个数据库上运行查询并显示数据库名称
问题描述:
使用我在本站点找到的示例,我成功地编写了以下查询。 它运作良好,但是,我希望得到每个被查询的数据库的名称在结果中报告,在这两列旁边。我所有的尝试都失败了。请提供任何帮助。在每个数据库上运行查询并显示数据库名称
DECLARE @sql varchar(max);
SELECT @sql = Coalesce(@sql + ' UNION ALL ', '') + 'SELECT column1, column2 FROM ' + QuoteName(name) + '.dbo.T_MyTable'
FROM sys.databases WHERE database_id > 4 AND state = 0
;
PRINT @sql
EXEC (@sql);
为例,下面将失败,无效的列名称的错误
DECLARE @sql varchar(max);
SELECT @sql = Coalesce(@sql + ' UNION ALL ', '') + 'SELECT SoStoreNameTx, SoStoreNoTx, ' + quotename(name) + ' FROM ' + QuoteName(name) + '.dbo.T_SoStore'
FROM sys.databases WHERE database_id > 4 AND state = 0
;
PRINT @sql
EXEC (@sql);
答
尝试COLUMN2后,你有没有尝试加入QUOTENAME(名字)下面
DECLARE @sql varchar(max);
SELECT @sql = Coalesce(@sql + ' UNION ALL ', '') + 'SELECT column1, column2, ''' + QuoteName(name)+ ''' as DBname FROM ' + QuoteName(name) + '.dbo.T_MyTable'
FROM sys.databases WHERE database_id > 4 AND state = 0
;
PRINT @sql
EXEC (@sql);
+0
完美地工作,非常感谢。它也将帮助我修补另一个类似的查询。 – DeepDiver
代码列列表? (在FROM关键字之前)。它应该接受'',所以你只需选择一个字符串。 – PacoDePaco
谢谢,我已经失败了。我编辑我的问题以添加失败的查询 – DeepDiver
@DeDDiver查看PRINT - 您选择的数据库名称未包含在单引号中 - 下面的答案显示了您应该如何执行此操作。 – Leonidas199x