使用表值构造函数 (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。
使用表值构造函数 (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:来自此博客)
假设您希望您的身份生成基于类别 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