You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从SQL Server 240张表中提取objectID列合并为单表?

合并多表objectID列的解决方案

动态SQL批量生成查询(推荐用于240张表)

手动写240个表的UNION ALL效率太低,用动态SQL自动生成语句是最优方案:

1. 先确认所有目标表都存在objectID列

避免后续执行时报错,先排查缺失该列的表:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME NOT LIKE '%(xx)%' 
  AND TABLE_NAME NOT LIKE '%archive%'
GROUP BY TABLE_NAME
HAVING SUM(CASE WHEN COLUMN_NAME = 'objectID' THEN 1 ELSE 0 END) = 0

如果查询无返回结果,说明所有目标表都包含objectID列,可继续下一步。

2. 生成并执行合并SQL

运行以下脚本会自动生成合并所有表objectID的语句,并将结果存入新表:

DECLARE @sql NVARCHAR(MAX) = ''

-- 拼接所有表的查询语句
SELECT @sql = @sql + 'SELECT objectID, ''' + TABLE_NAME + ''' AS source_table FROM ' + QUOTENAME(TABLE_NAME) + ' UNION ALL '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME NOT LIKE '%(xx)%' 
  AND TABLE_NAME NOT LIKE '%archive%'
  AND COLUMN_NAME = 'objectID'
GROUP BY TABLE_NAME

-- 移除末尾多余的UNION ALL
SET @sql = LEFT(@sql, LEN(@sql) - 10)

-- 将结果插入到新表(可修改表名merged_objectID_table为你需要的名称)
SET @sql = 'SELECT * INTO merged_objectID_table FROM (' + @sql + ') AS union_result'

-- 执行生成的SQL
EXEC sp_executesql @sql

其中source_table列用于标记每条数据的来源表,方便后续追溯。

手动编写UNION ALL(不推荐用于240张表)

如果是少量表可以手动拼接,但240张表不建议这么操作,示例如下:

SELECT objectID, 'table_name_1' AS source_table FROM table_name_1
UNION ALL
SELECT objectID, 'table_name_2' AS source_table FROM table_name_2
-- 依次添加其余所有表的查询语句

内容的提问来源于stack exchange,提问作者Maxcot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:17:40