我有以下表格结构,为了方便起见,我只标记单个列
Table_A
(Id, Name, Desc
)Table_1
(Id
这是标识列,Name
….)Table_2
(Id
这是标识列、Table_A_Id
、Table_1_Id
)
表1和表2之间的关系是1...*
现在,我已经为Table_A
创建了一个名为TType_Table_A
的表类型(它只包含Id
作为列,并且从我的C#应用程序中我发送了多条记录)。我已经根据需要实现了这种批量插入功能。
我需要的是,当我将记录从TType_Table_A
插入Table_2
时,比如说,使用以下语句,我想为插入的每个记录捕获Table_2
的Id
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
。
感谢任何输入/帮助
这就是我所知道的实现方法,但我想减少来自我的应用程序或存储过程中用户光标的DB调用
在表_1中插入记录并返回Id循环。。。。。通过记录并在表2中插入记录并返回Id
或
在TableType 中插入/选择时,在存储过程中使用光标
我假设这是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