【问题标题】:Get values of IDENTITY values when inserting multiple rows into a table having instead of trigger在将多行插入具有而不是触发器的表中时获取 IDENTITY 值的值
【发布时间】:2014-02-09 04:03:26
【问题描述】:

我将几行插入到表 A 中,该表具有 instead of insert 触发器和 identity 列。

然后我需要在表 B 中插入这么多行,其中每一行都包含对插入 A 中的行的引用。

问题是,我不能在 A 上使用 output 子句,因为不会设置身份(由于触发器)。

我知道对于一行我可以使用@@identity,只要在 A 中插入行是触发器内的最后一个插入语句,但这里我说的是多行。

我怎样才能做到这一点?

【问题讨论】:

  • 朋友也有类似的问题,I blogged about it here
  • 你是在同一个过程中插入表 A 和表 B 吗?我认为你应该使用一个临时表
  • 我建议事先适当地创建这些身份,并使用它们插入到 tableA 和 TableB 中。
  • 这是一个很好的问题。它可以是没有临时表的圆顶 i) 在表 A 和表 B 上创建视图 ii) 在视图上创建而不是触发器。 iii)在插入视图后传递所有值 iv)在触发器内部写入查询以使用输出插入到 TableA 中 v)触发器内部的下一个语句插入到 TableB 尝试让我们知道。

标签: sql-server sql-server-2008-r2


【解决方案1】:

我使用了这样的代码(你可以在 OUTPUT 子句中使用表变量)

declare @T table (requestID int); 
INSERT <tableA> (<fields>) 
       OUTPUT inserted.RequestID into @T 
VALUES( <fieldValues1> ),( <fieldValues2> ) ; 
Insert <tableB> (ID) select RequestID from @T;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    相关资源
    最近更新 更多