【问题标题】:SCOPE_IDENTITY for multiple recordsSCOPE_IDENTITY 多条记录
【发布时间】:2014-02-19 15:19:22
【问题描述】:

以下查询在事务中插入许多记录。我想获取新创建的增量标识符并在下一个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

【问题讨论】:

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


    【解决方案1】:

    你应该看看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 子句可以为已插入的每一行返回一个列的结果集(也适用于 DELETE 和 UPDATE 语句)。

    See MSDN documentation for more details

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

    【讨论】:

    • 所以我的下一条语句应该是INSERT EmployeeBenifitDetails(EmpBenId,Desc) SELECT EmployeeBenefitId,'Created Details' FROM EmployeeBenefits.Inserted?
    • 我知道了,我使用了表变量OUTPUT Inserted.EmployeeBenefitId INTO @EmpBenIds。谢谢
    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 2017-10-31
    • 2013-04-11
    • 2017-02-24
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多