不成功的错误消息是什么?
是否 b1、b2 有 update 触发器?

解决方案 »

  1.   


    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.
      

  2.   

    -- 这个不是 SQL Server 的语法。
    ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1]
     For delete AS-- 你改成
    ALTER TRIGGER [dbo].[a1_delete] ON [dbo].[a1]
     after delete AS
      

  3.   

    这个错误和触发器没有关系,它的意思是:在你程序读取了数据、然后执行DELETE之间,这条数据已经被其他用户修改了。
      

  4.   

    这就需要看看在Delete之前做了哪些操作导致数据被更改了
      

  5.   

    这个信息没啥用,出错被回滚了~逻辑问题
    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
      

  6.   


    在Sybase上跑没问题,移到MS SQL2008 则出现问题,难道 deleted 虚拟表在SQL当前成全局使用?
      

  7.   


    在Sybase上跑 一直没问题,移到MS SQL 来测试者出现 不能删除的问题。
      

  8.   


    可以使用 For 或 After 语法没问题。也 使用 after 来测试 ,问题依旧。
      

  9.   


    在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
      

  10.   


    没有 更改 资料,直接删除掉一笔资料的。在Sybase上跑 一直没问题,移到MS SQL 来测试则出现 不能删除的问题。
      

  11.   

    程序通过时间戳是否变化、或者比较所有字段是否变化来判断数据是否发送改变。
    所以要比较 a1 表在 Sybase 和 SQL Server 中的各个字段,某些数据类型是否取值精度不一样,而你PB中的定义不变,从而导致比较时一直认为是数据发生了改变。。
      

  12.   

    sybase和ms sqlserver的SQL语法都是差不多的,但是表是否创建的时候由于字段的数据类型有差异造成的
      

  13.   


    1.数据是没法被改变过。
    2.栏位长度没改变,只是把id char(20) 改为varchar(20) id 存的是20个字符 资料也是在MS SQL下录入,应该不存在类型或长度的问题。
    3.实际存档是 a1,a2 一起存档提交的,先执行 a2(a2也有触发器并使用到a1,所以放在前面,就是把此触发器停用也是保存不成功),再执行a1;
    若先执行 a1,再执行a2 (a2有触发器并使用到a1,所以更新资料将变为无效), 是可以存档成功。请确认 是否还有那些原因引起?谢谢。
      

  14.   

    我记得 PB 是有一套自己的数据库定义的,你 char(20) 变 varchar(20) 在 PB 中更改定义了没有?
    字段定义不一致,数据的比较可能就有问题。a1,a2 的描述没太简单,不理解。
      

  15.   


    已经解决,谢谢各位!解决方法:
    删除的表带有删除触发器,触发器中包含两个update,触发器首尾加上set nocount on 和set nocount off即可
    原因:删除时,若两笔 返回值 误判为数据有改变,所以需要加上 触发器首尾加上set nocount on 和set nocount off
      

  16.   

    如果 PB 是通过 @@ROWCOUNT 来判断成功与否的,那么你所有的触发器都要加这两句 SET 语句了。