2016-03-08 87 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'中的頂部查詢。 –