sqlserver同一数据库中A,B两表。使用触发器实现两表双向的数据同步添加

例如:A,B表中CustomerID为主键自增长,A,B表中的触发器只有一个存在的时候都能实现。当两个同时存在时,向其中一个表插数据就会报“消息8107,级别16,状态1... 例如: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
展开
 我来答
17号观察室
2013-05-24 · TA获得超过5730个赞
知道大有可为答主
回答量:3666
采纳率:66%
帮助的人:1354万
展开全部
这个错误很明显
就是SET IDENTITY_INSERT TB_Customer ON 你这条语句在a触发器中已经开启

而b触发器也开启了 此时a触发器还没有关闭IDENTITY_INSERT
另外一个又打开 肯定会报错了
不为什么要插入标识列? 设为自动增长 就不需要这个命令了 你的触发器就可以同时执行
更多追问追答
追问
两个表的CustomerID都是自增长且是主键,主要是想当A表执行添加语句的时候B表的CustomerID和A的一样
追答
你可以选择一个是直接插入 另外一个通过关联插入(这个就使用上面那个命令)
你既然两个触发器 都用这个插入的方法 使id保持一致 那么肯定有方法找到关联
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式