首先,insert、update、delete语句成功执行后会返回受影响的记录数,根据返回值可以判断SQL语句是否执行成功。但是如果返回的影响记录数在网络的传输过程中丢失,也就是在收不到应答信号时,采取什么方式来判断?
如果在收不到应答信号的情况下,将SQL语句再重复执行一遍,又会导致数据的重复插入或修改,不知道是不是我想复杂了,还请大家指点迷津

解决方案 »

  1.   

    @@ROWCOUNT
    返回受上一语句影响的行数。
      

  2.   

    LZ的可以返回受影响的记录数,后面的重复执行不会的。sql有事务机制的。
      

  3.   

    适当在insert 、update、delete中加入合理的事务。然后使用@@rowcont来返回是很好的操作,尽量不要使用select count(1) from xxx来查找是否变更成功,这样开销很大。同时,建议前端程序也要有一定的回滚机制,不然一旦网络断了,前端就在等待,应用程序也会有阻塞的情况出现的。性能问题不一定就是SQLServer的。
      

  4.   

    不知你用的是什么语言,如果执行成功,在连接执行中可以返回sql 语句的执行错误值!如我给你一段我的代码,当是vfp代码,SQLEXEC执行sql语句时,都会有一个返回值,如果是-1,就是出错。但可以触类旁通。
       * ---------------------------------------------------- \\ gnMyLogHandle为连接文件。
        
       IF SQLEXEC(gnMyLogHandle, "SELECT * from aaa) = -1
        
          = MESSAGEBOX("系统在读取服务器时间时,发生错误,请查找原因!",0x1000,m_message1)
       ENDIF
      

  5.   

    如何根据SQL SERVER 2008中程序的执行成功与否,返回不同的结果值,成功则返回0,不成功则返回错误号?