SQL Server中多行插入中的标识分配的顺序保证

时间:2012-06-27 07:00:42

标签: sql sql-server sql-server-2008

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

E.g。

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.

2 个答案:

答案 0 :(得分:2)

对我上面的评论进行抄袭,并且知道insert / select + order by的行为将保证生成身份顺序(#4:from this blog

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

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

答案 1 :(得分:-2)

只要您一次插入记录就可以了。例如,插入后如果删除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