T-SQL——关于将有序数据插入临时表
shanzm-2024年7月30日
0.背景
-
问题:需要将排序后的数据结果集插入到临时表中,少量数据发现没有任何问题,插入到临时表中的结果集保留了插入前的顺序。
但是当待插入的临时表的结果集数据量足够大,可以发现插入后,临时表中的数据并没有按照我们期待的那样,保留插入前的排序 -
原因:在SQL Server 2005/2008中,如果将有序的记录插入临时表,则从临时表查询出来的记录是有序的(不依赖ORDER BY也是有序状态),但是从SQL SERVER 2012开始,即使插入的记录集有序,查询出来的结果变成无序了。需要依赖ORDER BY来或得到一个有序结果
1. 解决方案1:使用ROW_NUMBER() OVER (ORDER BY…… )
DROP TABLE #result;
CREATE TABLE #result
(
RowID INT NULL,
Id INT NULL,
Name NVARCHAR(100) NULL,
);
INSERT INTO #result
SELECT ROW_NUMBER() OVER (ORDER BY b.CreatedTime DESC) RowID,--指定需要的排序方式
Id,
Name,
CreatedTime,
FROM
XXX_Table
2.解决方案2:给临时表创建聚集索引
CREATE TABLE #result
(
Id INT NOT NULL,
Name NVARCHAR(100) ,
CreateTime DATETIME
);
CREATE CLUSTERED INDEX IDX_#tables_CreateTime ON #result (CreateTime DESC);
INSERT INTO #result
SELECT Id,
Name,
CreatedTime
FROM XXX_Table
ORDER BY CreatedTime DESC;
SELECT *
FROM #result;
3.参考
标签:
SQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构