2017-09-13 89 views
0

使用我在本站点找到的示例,我成功地编写了以下查询。 它运作良好,但是,我希望得到每个被查询的数据库的名称在结果中报告,在这两列旁边。我所有的尝试都失败了。请提供任何帮助。在每个数据库上运行查询并显示数据库名称

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); 
+0

代码列列表? (在FROM关键字之前)。它应该接受'',所以你只需选择一个字符串。 – PacoDePaco

+0

谢谢,我已经失败了。我编辑我的问题以添加失败的查询 – DeepDiver

+0

@DeDDiver查看PRINT - 您选择的数据库名称未包含在单引号中 - 下面的答案显示了您应该如何执行此操作。 – Leonidas199x

回答

1

尝试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