SQL Server - 而不是触发器(IDENT_CURRENT问题)

时间:2015-08-17 17:28:15

标签: sql sql-server sql-server-2008 tsql

我在表上有一个INSTEAD OF INSERT触发器,我发现使用IDENT_CURRENT时出现问题。以下是我的触发器的示例代码。

CREATE TRIGGER [dbo].[Some_Insert_Trigger] ON [dbo].[Table_A]
INSTEAD OF INSERT
AS
BEGIN

//some code with temp table

  IF X==Y -- some logic
  BEGIN
    INSERT INTO Table_B VALUES(....) -- Table B has a identity column
    SELECT @justinserted=IDENT_CURRENT('Table_B')  - now this @justinserted variable has the last inserted value
  END
  ELSE
  BEGIN
     --get the max of ID from Table B
  END     

// here insert happens into another table which relies on temp table and @justinserted

END

这有时很有效,但不是所有时间。根据文档,IDENT_CURRENT不受范围和会话的限制,因此当两个进程同时命中代码时,IDENT_CURRENT很可能返回由不同进程生成的标识值。 这是一篇很好的文章,它全面解释了我所面临的问题。 http://sqlperformance.com/2014/01/t-sql-queries/ident-current

我不能在这里使用OUTPUT,因为inserted包含TableA而不是TableB

0 个答案:

没有答案