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

SQL Server 2012遍历sysobjects匹配表执行查询合并结果如何实现

SQL Server 2012 实现多表相同查询合并结果方案

核心通过动态SQL拼接实现,逻辑为:先从系统表匹配符合名称规则的表,批量拼接统一的SELECT语句后执行,最终得到合并后的结果集。

完整实现代码

DECLARE @TargetSql NVARCHAR(MAX)

-- 1. 拼接所有符合条件表的查询语句
SELECT @TargetSql = STUFF((
    -- 此处SELECT后的字段列表替换为你实际要查询的字段,保持所有表字段结构/类型兼容
    SELECT ' UNION ALL SELECT id, create_time, biz_amount FROM ' + QUOTENAME(t.name)
    FROM sys.tables t
    -- 此处替换为你自己的表名匹配规则
    WHERE t.name LIKE 'biz_order_%'
    FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'),
-- 去掉开头多余的' UNION ALL '字符串
1, 11, '')

-- 调试用:打印拼接完成的SQL,可先检查语句是否正确
-- PRINT @TargetSql

-- 2. 执行拼接完成的SQL,得到合并结果集
EXEC sp_executesql @TargetSql

注意事项

  • 如果你习惯用sysobjects做表匹配,可以替换上面的表查询逻辑:
    SELECT name FROM sysobjects WHERE xtype = 'U' AND name LIKE 'biz_order_%'
    
  • 用QUOTENAME包裹表名,可避免表名包含特殊字符、SQL关键字时出现语法错误
  • 不需要去重的场景优先用UNION ALL,性能远高于需要做去重计算的UNION
  • 所有匹配到的表必须包含SELECT语句中写的全部字段,且对应字段的数据类型兼容,否则执行会报错
  • 不同表的字段名不一致时可以用别名统一,例如SELECT order_id AS id, pay_money AS biz_amount FROM xxx

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 04:39:01