繁体   English   中英

SQL Server多行插入中身份分配的顺序保证

[英]Order guarantee for identity assignment in multi-row insert in SQL Server

使用表值构造器(http://msdn.microsoft.com/zh-cn/library/dd776382(v=sql.100).aspx)插入多行时,是否保证填充的任何标识列的顺序都匹配TVC中的行?

例如

CREATE TABLE A (a int identity(1, 1), b int)

INSERT INTO A(b) VALUES (1), (2)

引擎保证的值是否以与b相同的顺序分配,即在这种情况下,它们匹配a = 1,b = 1和a = 2,b = 2。

above带我在上面的评论,并且知道insert / select + order by的行为将保证生成身份顺序(#4: 来自此博客

假设您希望基于类别ID生成身份,则可以按以下方式使用表值构造函数来实现目标(不确定是否满足其他约束)。

insert into thetable(CategoryId, CategoryName)
select *
from
  (values
    (101, 'Bikes'),
    (103, 'Clothes'),
    (102, 'Accessories')
  ) AS Category(CategoryID, CategoryName)
order by CategoryId

只要您将记录插入一张照片中就可以了。 例如,在插入后,如果删除a = 2的记录,然后再次重新插入值b = 2,则标识列的值将为max(a)+1

展示

 DECLARE @Sample TABLE
 (a int identity(1, 1), b int)

 Insert into @Sample values (1),(2)

a   b
1   1
2   2

 Delete from @Sample where a=2

 Insert into @Sample values (2)
 Select * from @Sample

 a  b
 1  1
 3  2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM