首页 > 解决方案 > 来自多个表的单列 SQL-SERVER 2014 Expr

问题描述

我有一个包含 50 个表的数据库,这些表具有相同的结构(相同的列名、类型)聚集在Created Date column. 这些表中的每一个都有大约 100,000 行,我需要为某些列提取所有这些表。

select * from customerNY

created date | Name | Age | Gender
__________________________________
25-Jan-2016  | Chris|  25 | M
27-Jan-2016  | John |  24 | M
30-Jan-2016  | June |  34 | F

select * from customerFL

created date | Name | Age | Gender
__________________________________
25-Jan-2016  | Matt |  44 | M
27-Jan-2016  | Rose |  24 | F
30-Jan-2016  | Bane |  34 | M

以上是数据库中表的示例。我需要一个快速运行的 SQL 来提取所有数据。目前,我正在UNION ALL为此使用,但完成报告需要很多时间。有没有另一种方法可以在不使用UNION ALL诸如

select Name, Age, Gender from [:customerNY:customerFL:]

断章取义:我可以在结果中提取表名吗?

谢谢你的帮助。我一直在考虑这件事,但我找不到更快的方法。

标签: sqlsql-serversql-server-2014unionunion-all

解决方案


这种动态 SQL 方法应该满足您的条件,它从架构中选择表名并SELECT在运行时创建一个语句供其执行,并满足UNION ALL每个SELECT语句的条件,UNION ALL然后我用它STUFF来删除第一个语句。

DECLARE @SQL AS VarChar(MAX)
SET @SQL = ''

SELECT @SQL = @SQL + 'UNION ALL SELECT Name, Age, Gender FROM ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']' + CHAR(13)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'Customer%'
SELECT @SQL = STUFF(@SQL,1,10,'')

EXEC (@SQL)

但是我不建议使用它,您应该按照人们在评论中的建议来重组您的数据。


推荐阅读