启用触发器 更新就出错Row changed between retrieve and update.
禁用就好了,有什么解决办法吗??
补充一下,经测试发现取消触发器的 IF UPDATE(xm) OR UPDATE(xb) OR UPDATE(nl) OR UPDATE(nldw) 行就好了,这行写的不对吗?
--dw的更新时语句为
UPDATE zybrzl SET sflx = 1, nl = '25', rybq = '1', rq = '2014-06-12 10:36:27.703', cyks = '11' WHERE zyid = 5569
--触发器代码
ALTER TRIGGER [dbo].[Tri_zybrzl_update_lis]
ON [dbo].[zybrzl]
for UPDATE
AS
IF UPDATE(xm) OR UPDATE(xb) OR UPDATE(nl) OR UPDATE(nldw)
BEGIN
return
UPDATE t1
SET V_BRXM=i.XM,v_xb= (case rtrim(ltrim(i.xb)) when '1' then '男' when '2' then '女' else null end),v_nl=i.nl,V_NLLX=i.nldw
FROM
V_LIS_ZYSFXX v ,his_lis.dbo.tb_brsfxxb t1,INSERTED i
WHERE v.V_Lsh=t1.V_LSH
AND t1.D_SFSJ>DATEADD(dd,-7,GETDATE())
AND i.blh=v.V_LSH
AND t1.I_BRLBDM=1
UPDATE t1
SET V_BRXM=i.XM,v_xb= (case rtrim(ltrim(i.xb)) when '1' then '男' when '2' then '女' else null end),v_nl=i.nl,V_NLLX=i.nldw
FROM
V_LIS_ZYSFXX v ,his_lis.dbo.TB_BRSFXXB_JYSQ t1,INSERTED i
WHERE v.V_Lsh=t1.V_LSH
AND t1.D_SFSJ>DATEADD(dd,-7,GETDATE())
AND i.blh=v.V_LSH
AND t1.I_BRLBDM=1
END
------解决方案--------------------
//IF UPDATE(xm) OR UPDATE(xb) OR UPDATE(nl) OR UPDATE(nldw)
这会导致sqlca.sqlnrows=0 所以update会报那个错误
可以强制更新一行数据来试试
------解决方案--------------------
试试加个FOR EACH ROW
------解决方案--------------------
在触发器中写上 set nocount on 就行啦
这是我遇到问题是发的帖子
http://bbs.csdn.net/topics/390562410
------解决方案--------------------
应该是那句话导致了影响的行数为0引起的,加上一句
SET NOCOUNT ON;
应该可以解决