例如:A,B表中CustomerID为主键自增长 ,A, B表中的触发器只有一个存在的时候都能实现。当两个同时存在时,向其中一个表插数据就会报“消息 8107,级别 16,状态 1,过程 addToB,第 8 行
表 'FitnessClub.dbo.TB_Customer' 的 IDENTITY_INSERT 已经为 ON。无法为表 'TB_CustomerTemp' 执行 SET 操作。”这个错误,为什么。
代码:
A表中的触发器:
CREATE TRIGGER [addToB]
ON [dbo].[TB_Customer]
AFTER INSERT
AS BEGIN
SET IDENTITY_INSERT TB_CustomerTemp ON
INSERT INTO
TB_CustomerTemp([CustomerID],[CustomerName]
,[Age]
,[Address])
SELECT [CustomerID],[CustomerName]
,[Age]
,[Address]
FROM INSERTED
SET IDENTITY_INSERT TB_CustomerTemp OFF
END
B表中的触发器:
ALTER TRIGGER [addToA]
ON [dbo].[TB_CustomerTemp]
AFTER INSERT
AS BEGIN
SET IDENTITY_INSERT TB_Customer ON
INSERT INTO
TB_Customer([CustomerID],[CustomerName]
,[Age]
,[Address])
SELECT [CustomerID],[CustomerName]
,[Age]
,[Address]
FROM INSERTED
SET IDENTITY_INSERT TB_Customer OFF
END
两个表的CustomerID都是自增长且是主键,主要是想当A表执行添加语句的时候B表的CustomerID和A的一样
追答你可以选择一个是直接插入 另外一个通过关联插入(这个就使用上面那个命令)
你既然两个触发器 都用这个插入的方法 使id保持一致 那么肯定有方法找到关联
额,那我双向的触发器插入该如何改才能 不报错呢。A插入时调用A表中的触发器将数据同时插入B表。B表插入数据时调用B表中的触发器将数据同时插入A表呢,我该改哪里能实现呢。
追答如果你能避免两个触发器同时触发 那就很简单 如果同时触发的话 很有可能产生id冲突
追问你的意思是当我向A表添加数据时调用触发器向B表添加数据的同时又触发了B中的触发器了?这样才产生了冲突?
追答是的 因为你这两个都是插入的触发器 如果触发器不产生冲突 会产生循环的 设计上不合理
追问哦哦,那我该如何修改呢。我能加你么,第一次接触触发器,希望多多指点。
追答可以 只是现在有点忙