我有一个具有标识列的临时表。此表中有多个插入来自其他几个表。但是,在其中一个插入中,我需要按照我使用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,依此类推。
如果代码示例有点邋..请道歉。
答案 0 :(得分:0)
SQL Server引擎团队have made this blog post:
使用SELECT和ORDER BY来填充行的INSERT查询保证了如何计算标识值,但不保证插入行的顺序
他们澄清了“插入行的顺序”在评论中的含义:
是的,身份值将按ORDER BY建立的顺序生成。如果标识列上存在聚簇索引,则值将按索引键的逻辑顺序排列。这仍然不能保证物理的插入顺序。索引维护是一个不同的步骤,例如也可以并行完成。因此,您最终可能会基于ORDER BY子句生成标识值,然后将这些行提供给将执行维护任务的聚集索引插入操作符。