sql - 来自多个表的单列 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:]
断章取义:我可以在结果中提取表名吗?
谢谢你的帮助。我一直在考虑这件事,但我找不到更快的方法。
解决方案
这种动态 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)
但是我不建议使用它,您应该按照人们在评论中的建议来重组您的数据。
推荐阅读
- c# - 如何使用 C# 制作 3D 相机缩放
- php - 无需 SSO 从另一台服务器进行身份验证
- c++ - 如何创建一个函数来对我的数据从最近到最远的相同数据的平均值进行排序?
- node.js - 不同版本的npm安装的node包有区别吗?
- ag-grid - 如何在编辑时保持单元格突出显示
- python-3.x - 部分响应(API)
- c# - Unity 2D 格斗游戏相机
- java - java.lang.StackOverflowError - Kickstart 问题(2019 Round C Wiggle Walk)
- ember.js - WatcherAdapter 的第一个参数必须是 SourceNodeWrapper 节点的数组
- oracle - Birt 报告在 LONGDESCRIPTION CLOB 字段中存储 4000 个字符后跳过字母/行