0

我有一个具有标识列的临时表。从其他几个表中有多个插入到该表中。但是,在其中一个插入中,我需要以使用 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,依此类推。

抱歉,如果代码示例有点邋遢..

4

1 回答 1

0

SQL Server 引擎团队发表了这篇博文:

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

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

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

于 2013-10-09T00:16:01.233 回答