使用表值构造器(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