如何在联合查询
问题描述:
显示表名称下面的脚本运行良好:如何在联合查询
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)
但我需要用表名,以标识信息是从哪里来的第二列。
我该怎么做?
答
你利用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。
我得到的结果是类似的东西: 'SELECT id_contato, 'TABLE_NAME' AS TABLE_NAME FROM disparo_disparo_1878_prospect_zumbi UNION ALL SELECT id_contato(...)' 表的名字不被显示。 – Richard
@Richard我在检查完后可能已经更新了引号,但最初确实有它混合,但现在应该工作,至少在SQL Server中检查我。 –
我不确定我是否遵循你的意思,这是你当前的结果,但你想要什么呢?由于您将它们联合在一起,所以别名将会是静态的,因为它来自'UNION'中的顶部查询。 –