b1,b2 没有触发器.在SQL后台 直接删除成功, PB程序上删除提示: SQLSyntax:DELETE FROM a1 WHERE id = '141027-001' SQLDBCode:-3 SQLErrText:Row changed between retrieve and update. No changes made to database.
-- 这个不是 SQL Server 的语法。 ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1] For delete AS-- 你改成 ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1] after delete AS
这个信息没啥用,出错被回滚了~逻辑问题 deleted 这时是a1的没错 update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id deleted 这时是b1的了 update b2 set a1_idnote='' from b2,deleted where b2.a1_id=deleted.id
在Sybase上跑没问题,移到MS SQL2008 则出现问题,难道 deleted 虚拟表在SQL当前成全局使用? 呃 不是,是我的错,之前的数据问题~~ deleted 这时是a1的没错 update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id deleted 这时还是a1 update b2 set a1_idnote='' from b2,deleted where b2.a1_id=deleted.id
b1,b2 没有触发器.在SQL后台 直接删除成功,
PB程序上删除提示:
SQLSyntax:DELETE FROM a1 WHERE id = '141027-001'
SQLDBCode:-3
SQLErrText:Row changed between retrieve and update.
No changes made to database.
ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1]
For delete AS-- 你改成
ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1]
after delete AS
deleted 这时是a1的没错
update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id
deleted 这时是b1的了
update b2 set a1_idnote='' from b2,deleted where b2.a1_id=deleted.id
在Sybase上跑没问题,移到MS SQL2008 则出现问题,难道 deleted 虚拟表在SQL当前成全局使用?
在Sybase上跑 一直没问题,移到MS SQL 来测试者出现 不能删除的问题。
可以使用 For 或 After 语法没问题。也 使用 after 来测试 ,问题依旧。
在Sybase上跑没问题,移到MS SQL2008 则出现问题,难道 deleted 虚拟表在SQL当前成全局使用?
呃 不是,是我的错,之前的数据问题~~
deleted 这时是a1的没错
update b1 set a1_idnote='' from b1,deleted where b1.a1_id=deleted.id
deleted 这时还是a1
update b2 set a1_idnote='' from b2,deleted where b2.a1_id=deleted.id
没有 更改 资料,直接删除掉一笔资料的。在Sybase上跑 一直没问题,移到MS SQL 来测试则出现 不能删除的问题。
所以要比较 a1 表在 Sybase 和 SQL Server 中的各个字段,某些数据类型是否取值精度不一样,而你PB中的定义不变,从而导致比较时一直认为是数据发生了改变。。
1.数据是没法被改变过。
2.栏位长度没改变,只是把id char(20) 改为varchar(20) id 存的是20个字符 资料也是在MS SQL下录入,应该不存在类型或长度的问题。
3.实际存档是 a1,a2 一起存档提交的,先执行 a2(a2也有触发器并使用到a1,所以放在前面,就是把此触发器停用也是保存不成功),再执行a1;
若先执行 a1,再执行a2 (a2有触发器并使用到a1,所以更新资料将变为无效), 是可以存档成功。请确认 是否还有那些原因引起?谢谢。
字段定义不一致,数据的比较可能就有问题。a1,a2 的描述没太简单,不理解。
已经解决,谢谢各位!解决方法:
删除的表带有删除触发器,触发器中包含两个update,触发器首尾加上set nocount on 和set nocount off即可
原因:删除时,若两笔 返回值 误判为数据有改变,所以需要加上 触发器首尾加上set nocount on 和set nocount off