是否在应用order by子句之前或之后自动递增IDENTITY列?

时间:2013-10-08 23:54:33

标签: sql-server auto-increment

我有一个具有标识列的临时表。此表中有多个插入来自其他几个表。但是,在其中一个插入中,我需要按照我使用ORDER BY子句的特定顺序将行插入其中。是否会在临时表中的行排序之前或之后应用自动增量?

谢谢!

CREATE TABLE #tempTable
 (
    SeqNo INT IDENTITY(1, 1),
    Column1 INT,
    Column2 INT,
    Column3 INT
)

INSERT #tempTable
 (
    Column1,
    Column2,
    Column3
)
SELECT  W, 
        X, 
        Y
FROM    dummyTable
ORDER BY Z

我想我的问题是SeqNo是否会以一种方式自动递增,使得Z值最小的行为1,第二小的行为2,依此类推。

如果代码示例有点邋..请道歉。

1 个答案:

答案 0 :(得分:0)

SQL Server引擎团队have made this blog post

  

使用SELECT和ORDER BY来填充行的INSERT查询保证了如何计算标识值,但不保证插入行的顺序

他们澄清了“插入行的顺序”在评论中的含义:

  

是的,身份值将按ORDER BY建立的顺序生成。如果标识列上存在聚簇索引,则值将按索引键的逻辑顺序排列。这仍然不能保证物理的插入顺序。索引维护是一个不同的步骤,例如也可以并行完成。因此,您最终可能会基于ORDER BY子句生成标识值,然后将这些行提供给将执行维护任务的聚集索引插入操作符。