使用表值构造函数(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.
答案 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