2

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

例如

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

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

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

4

2 回答 2

2

捎带我上面的评论,并且知道插入/选择+排序的行为将保证生成身份顺序(#4:来自此博客

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

insert into thetable(CategoryId, CategoryName)
select *
from
  (values
    (101, 'Bikes'),
    (103, 'Clothes'),
    (102, 'Accessories')
  ) AS Category(CategoryID, CategoryName)
order by CategoryId
于 2014-06-18T04:08:38.067 回答
-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
于 2012-06-27T07:09:19.373 回答