多个记录的SCOPE_IDENTITY

时间:2014-02-19 15:19:23

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

以下查询在事务中插入许多记录。我想获取新创建的增量标识符,并在下一个INSERT语句

中使用它

对于单个记录,我可以使用如下

 SELECT @new_emp_id= SCOPE_IDENTITY()     

多个记录的SCOPE_IDENTITY怎么样?或者我们可以将它插入临时表并循环通过它?

 INSERT EmployeeBenifits(EmployeeId,BenifitID,StartdateTime,EndDateTime) 

 SELECT @new_emp_id,BenifitID,GetDate(),@PassedEndDate FROM Benifits

 INSERT EmployeeBenifitDetails(EmpBenId,Desc)
 SELECT EmpBenId,'Created Details' FROM @NewlyInsertedEmplBenifits

1 个答案:

答案 0 :(得分:10)

您应该查看OUTPUT子句:

INSERT INTO dbo.EmployeeBenefits(EmployeeId, BenefitID, StartdateTime, EndDateTime) 
   OUTPUT Inserted.EmployeeBenefitId, Inserted.EmployeeID, Inserted.BenefitID   -- or whatever you want to return here
   SELECT 
      @new_emp_id, BenefitID, GetDate(), @PassedEndDate 
  FROM 
      dbo.Benefits

基本上,OUTPUT子句可以为已插入的每一行返回一组结果列(也适用于DELETEUPDATE语句。

See MSDN documentation for more details

您还可以将OUTPUT行发送到临时表(或表变量),以便稍后进一步处理。