4

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

  • Table_A( Id, 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_2from中时TType_Table_A,我想为插入IdTable_2每条记录捕获

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 条记录,我想Id为这 2 条记录中的每一条记录。

任何输入/帮助表示赞赏

这就是我知道如何实现的,但我想减少来自我的应用程序或存储过程中的用户游标的数据库调用

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

或者

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

4

1 回答 1

12

我假设这是 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
于 2013-06-24T21:58:24.853 回答