2016-03-08 88 views
2

显示表名称下面的脚本运行良好:如何在联合查询

DECLARE @SelectClause VARCHAR(100) = 'SELECT id_contato' 
     ,@Query   VARCHAR(8000) = '' 

SELECT @Query = @Query + @SelectClause + ' FROM ' + TABLE_NAME + ' UNION ALL ' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE (TABLE_NAME LIKE '%zumbi' or TABLE_NAME like '%engajado%') 
SELECT @Query = LEFT(@Query, LEN(@Query) - LEN(' UNION ALL ')) 
EXEC (@Query) 

但我需要用表名,以标识信息是从哪里来的第二列。

我该怎么做?

回答

2

你利用table_name场已经在您的查询,只需将其添加到您的SELECT和正确引用它,所以它回来为字符串字面量:

DECLARE @SelectClause VARCHAR(100) = 'SELECT id_contato' 
     ,@Query   VARCHAR(8000) = '' 

SELECT @Query = @Query + @SelectClause + ','''+Table_Name+''' AS Table_Name FROM ' + TABLE_NAME + ' UNION ALL ' 
FROM INFORMATION_SCHEMA.TABLES 
WHERE (TABLE_NAME LIKE '%zumbi' or TABLE_NAME like '%engajado%') 
SELECT @Query = LEFT(@Query, LEN(@Query) - LEN(' UNION ALL ')) 
EXEC (@Query) 

更新引号,对我的作品SQL Server。

+0

我得到的结果是类似的东西: 'SELECT id_contato, 'TABLE_NAME' AS TABLE_NAME FROM disparo_disparo_1878_prospect_zumbi UNION ALL SELECT id_contato(...)' 表的名字不被显示。 – Richard

+0

@Richard我在检查完后可能已经更新了引号,但最初确实有它混合,但现在应该工作,至少在SQL Server中检查我。 –

+0

我不确定我是否遵循你的意思,这是你当前的结果,但你想要什么呢?由于您将它们联合在一起,所以别名将会是静态的,因为它来自'UNION'中的顶部查询。 –