插入SQL表类型的批量记录时获取SCOPE_IDENTITY值

时间:2013-06-24 21:45:36

标签: sql sql-server bulkinsert scope-identity

我有以下表结构,为方便起见,我只标记单个列

  • Table_AId, Name, Desc
  • Table_1Id 这是标识列Name ....)
  • Table_2Id 这是标识列Table_A_IdTable_1_Id

Table_1与Table_2之间的关系为1...*

现在我为Table_A创建了一个名为TType_Table_A的表格类型(仅包含Id作为列,并且从我的C#应用​​程序中发送了多个记录)。我已根据需要实现了这种批量插入功能。

当我将Table_2的记录从TType_Table_A插入以下语句时,我需要的是,我想为每个插入的记录捕获Id Table_2 / p>

declare @count int = (select count(*) from @TType_Table_A); --a variable declared for TType_Table_A

if(@count > 0)
  begin
    insert into Table_2(Table_A_Id,Table_1_Id)
    SELECT @SomeValue, @SomeValueAsParameter FROM @TType_Table_A;
  end;

现在说如果插入了2条记录,我想为这2条记录中的每条记录捕获Id

赞赏任何输入/帮助

我知道这是如何实现的,但我希望减少存储过程中应用程序或用户光标的数据库调用

在Table_1中插入记录并返回Id循环.....通过记录并在表2中插入记录并返回Id

OR

从TableType

插入/选择时,在存储过程中使用游标

1 个答案:

答案 0 :(得分:8)

我认为这是Sql Server?然后你可以使用OUTPUT子句,如下所示:

declare @NewId table (MyNewId INT) 

 insert into Table_2(Table_A_Id,Table_1_Id)
 output INSERTED.MyNewId INTO @TempTable(MyNewID)
 SELECT SomeValue, SomeValueAsParameter FROM @TType_Table_A;

 SELECT * FROM @NewId