insert into ...select * from ...order by ...问题

Kinglin_sky 2010-03-08 03:08:39
请大家看看下边这句SQL语句有什么问题没?
在SQL SERVER 2000 中

insert into #temptable select * from tableA as a order by A.column2,A.column1

大概功能时, 查询tableA 中, 符合条件的行并按column2,column1进行排序, 插入到临时表#temptable中,
其中A.column1为主键, 问是否会能达到目的, 现在比较怀疑的, 在大数据量时,select 得到的集合, 在用insert into 是否是按照我们要求的那种排序方式插入临时表, 还是可能按照原有表格中的物理顺序插入。请高手确认下, 谢谢!
...全文
1594 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kinglin_sky 2010-03-11
  • 打赏
  • 举报
回复
不是的, 当数据达到一定量时, 临时表中的数据, 将不再是有序的了, 应该是分批插入的, 只能保证这一批是有序的, 不能保证全部是有序的。
echoxue 2010-03-08
  • 打赏
  • 举报
回复
关注中,应该是已经排好序的,但是不建议再插入之前排序,插入好后在select的时候order by
sych888 2010-03-08
  • 打赏
  • 举报
回复
通过查看上面的语句中
INSERT INTO #TB
SELECT * FROM TB ORDER BY COL1,COL2
的执行计划就会发现,系统会先取数据,再排序,再取前几行(如果有TOP X的话),再插入,所以#TB中的数据应该是已排序的
up.............
Kinglin_sky 2010-03-08
  • 打赏
  • 举报
回复
不过在Insert into 中没有该列, 而是让系统自动增长, 现在用小数据测试, 没有出现不一致的情况, 不知道大数据量时, 是否会出问题。
Kinglin_sky 2010-03-08
  • 打赏
  • 举报
回复
引用 5 楼 sql77 的回复:
在大数据量时,select 得到的集合, 在用insert into 是否是按照我们要求的那种排序方式插入临时表

试试看,应该不会,要是有IDENTITY在2000中可能就要小心了,用排序列才不会


在临时表中, 确实还存在一列IDENTITY的列, 且在上面建立了聚集索引,
xman_78tom 2010-03-08
  • 打赏
  • 举报
回复
SQL Server 是不能保证一定按 order by 顺序插入数据的,除非在被插入表上创建关于 order by 排序列的聚集索引。
guguda2008 2010-03-08
  • 打赏
  • 举报
回复
通过查看上面的语句中
INSERT INTO #TB
SELECT * FROM TB ORDER BY COL1,COL2
的执行计划就会发现,系统会先取数据,再排序,再取前几行(如果有TOP X的话),再插入,所以#TB中的数据应该是已排序的
guguda2008 2010-03-08
  • 打赏
  • 举报
回复
USE TEMPDB
IF OBJECT_ID('TB') IS NOT NULL DROP TABLE TB
IF OBJECT_ID('#TB') IS NOT NULL DROP TABLE #TB
GO
CREATE TABLE TB(COL1 INT,COL2 INT)
INSERT INTO TB
SELECT 1,2 UNION ALL
SELECT 2,3 UNION ALL
SELECT 2,1 UNION ALL
SELECT 0,1
CREATE TABLE #TB(COL1 INT,COL2 INT)

INSERT INTO #TB
SELECT * FROM TB ORDER BY COL1,COL2

SELECT * FROM #TB
/*
0 1
1 2
2 1
2 3
*/
SQL77 2010-03-08
  • 打赏
  • 举报
回复
在大数据量时,select 得到的集合, 在用insert into 是否是按照我们要求的那种排序方式插入临时表

试试看,应该不会,要是有IDENTITY在2000中可能就要小心了,用排序列才不会
guguda2008 2010-03-08
  • 打赏
  • 举报
回复
会按查询出来的顺序原样插入临时表
--小F-- 2010-03-08
  • 打赏
  • 举报
回复
如果没有加索引的话 应该是没问题的
--小F-- 2010-03-08
  • 打赏
  • 举报
回复
这样的问题不是很大 ...
dawugui 2010-03-08
  • 打赏
  • 举报
回复
原则上没问题.
如果有问题,建议考虑把column2,column1 一起插入到临时表,然后在临时表中对column2,column1 进行排序.

34,872

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧