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
相关产品推荐
相关产品推荐

