【发布时间】:2021-07-03 22:02:25
【问题描述】:
我在 SQL Server 数据库 (SSMS) 中有 1000 个表,并希望将 1000 个表中的选定列放入 1 个新表中。
我想做这样的事情
-
创建一个包含 a、b、c 列的新表
-
确定要从中选择数据的 1000 个表 - 要根据通配符之类的内容选择表名。
在数据库中,有很多很多表,并且名称遵循类似的模式,例如
ABC_0001,ABC_0002...ABC_1000,XYZ_0001,XYZ_0002, ...XYZ_1000等...我只想选择以ABC开头的表格.. -
从这 1000 个表中选择列 a、b、c,并将值插入在步骤 #1 中创建的表中
我是这样做的:
SELECT a, b, c FROM ABC_0001 UNION_ALL
SELECT a, b, c FROM ABC_0002 UNION_ALL
SELECT a, b, c FROM ABC_1000
INSERT INTO NEW_TABLE
并且想做类似的事情
SELECT a, b, c FROM TABLE LIKE ABC_%
INSERT INTO NEW_TABLE
【问题讨论】:
-
您是否打算一次性在 SQL Management Studio 中运行它?如果是这样,可能你最简单的方法是动态地为来自“sys.sysobjects”的选择的每个结果构建选择语句 - 例如。 SELECT [name] FROM sys.sysobjects WHERE [name] LIKE 'ABC_%' AND [type] = 'U'
-
感谢克雷格的回复,我是 SQL 的新手,所以不能完全遵循.. 但是我有所有表的列表,即 ABC_0001... ABC_1000.. 所以当输入 SELECT * FROM sys.tables WHERE ( name LIKE 'ABC_%' ) AND type = 'U' 我得到表名和对象 id 等等..但是我希望所有表中的数据合二为一..
-
实际上没有一条语句可以确定所有可能的表名并一次性从所有这些表中进行选择。我的建议是查询“sysobjects”以确定与您的条件匹配的可用表名,但是您必须遍历每条记录并将每个表的相关选择语句增量添加到变量中,然后您可以执行最后的那条语句.....但是,如果您对 SQL 完全陌生,那么这对您来说可能是一个挑战。
-
或许使用Excel(或类似的,例如Google Sheets)生成流水号序列,然后使用公式生成每个'SELECT a, b, c FROM ABC_
UNION ALL ' 语句 - 然后您可以复制并粘贴到 Management Studio 并执行查询。如果我有这样的一次性任务,我经常采用这种方法,需要生成一个通用的 SQL 语句,但是 Excel 可以轻松完成某种数字序列
标签: sql-server database select insert union-all