触发在标识列上插入

时间:2012-11-29 16:33:48

标签: sql-server-2005

我有一个带有标识列的表A,它是主键。 主键同时是指向另一个表B的外键。

我正在尝试构建一个插入触发器,在表B中插入即将在表A中创建的标识列,以及另一个自定义值,例如“1”。

我尝试使用@@ Identity但我一直遇到外键冲突。谢谢你的帮助。

create TRIGGER dbo.tr ON dbo.TableA FOR INSERT
AS 
SET NOCOUNT ON
begin
    insert into TableB
    select @@identity, 1;
end

1 个答案:

答案 0 :(得分:0)

alexolb在上面的评论中自己回答了这个问题。另一种方法是使用IDENT_CURRENT函数而不是从表中选择。这种方法的缺点是它总是比种子开始比你的头号更高,但是通过将种子设置为低一个单位可以很容易地解决这个问题。我认为使用函数比使用子查询感觉更好。

例如:

CREATE TABLE [tbl_TiggeredTable](
    [id] [int] identity(0,1) NOT NULL,
    [other] [varchar](max)
)

CREATE TRIGGER [trgMyTrigger] 
    ON  [tbl_TriggeredTable] 
    INSTEAD OF INSERT,UPDATE,DELETE

    SET identity_insert tbl_TriggeredTable ON
    INSERT INTO tbl_TriggeredTable (
        [id],
        [other]
    ) 
    SELECT
        -- The identity column will have a zero in the insert table when
        -- it has not been populated yet, so we need to figure it out manually
        case i.[id]
        when 0 then IDENT_CURRENT('tbl_TriggeredTable') + IDENT_INCR('tbl_TriggeredTable') 
        ELSE i.[id]
        END,
        i.[other],
    FROM inserted i
    SET identity_insert tbl_TriggeredTable OFF

END