【问题标题】:Is an IDENTITY column auto-incremented before or after an order by clause is applied to it?IDENTITY 列是在应用 order by 子句之前还是之后自动递增的?
【发布时间】:2013-10-08 23:54:32
【问题描述】:

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

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

【问题讨论】:

  • 尝试发布一些代码/sql来显示你在做什么,我们也许能够回答这个问题。 :)

标签: sql-server auto-increment


【解决方案1】:

SQL Server 引擎团队have made this blog post

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

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

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

【讨论】:

    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多