0

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

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

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

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

1 回答 1

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
于 2015-07-15T01:30:37.510 回答