我有一个带有标识列的表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
答案 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