当前位置: 首页 > 面试题库 >

在为SQL TableType插入批量记录时获取SCOPE_IDENTITY值

景正文
2023-03-14
问题内容

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

  • 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发言权下面的语句,我想捕捉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条记录中的每条记录。

任何输入/帮助表示赞赏

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

在表_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


 类似资料:
  • 我正在向CouchBase批量插入数据,几分钟后出现了这个异常: 我做错什么了吗?

  • 我收到以下异常- org.hibernate.exception.sqlgrammarexception:无法插入:[Employee] 以下是详细信息: hibernate.cfg.xml employee.hbm.xml 请帮助解决异常。提前道谢!

  • 我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出

  • 问题内容: 一直试图获取SCOPE_IDENTITY()(最后一个插入到DB中的ID)并将其作为变量存储在我的PHP函数中。 这是我目前拥有的: 我做错了什么? 编辑: 另外…在构造中,我试图在$ this-> post中传递ID($ this-> Id),但它返回0。我可以看到这是由于我只设置了$查询通过后this-> Id,因此返回0,但我不确定如何继续。有什么建议? 问题答案: 首先,您的问

  • 问题内容: 我使用以下查询将多个记录插入到表中: 由于查询要插入多个记录,因此无法使用 SCOPE_IDENTITY 来检索PK。有什么方法可以获取最近插入记录的ID? 问题答案: SCOPE_IDENTITY()将正确为您提供LAST ID。您需要将其与@@ Rowcount结合使用,以提供ID范围。 正如其他Richard指出的那样 ,这仅在您将增量设置为1时有效 例如: 执行此操作的另一种方

  • 所以我只使用Jooq来构建查询,而不是执行查询,如下所示: 对象可以执行查询conn.asyncExecute(org.jooq.query query)。所以我的问题是,如何创建类型为org.jooq的批插入查询。查询?具体来说,给定一个列表 请注意,我知道其他问题询问如何使用Jooq进行批处理插入,但他们使用Jooq执行查询就像下面Jose Martinez的回答一样,而这里我只使用Jooq构