免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3298 | 回复: 4
打印 上一主题 下一主题

触发器中使用游标导致1608号错误 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-29 10:53 |只看该作者 |倒序浏览
我在触发器作了一个关联修改,其中用到了一个游标,在公司测试的时候没有问题,但是由于公司的版本是windows下面的11.9,而客户那里是solaris8下面的12.0,结果导致以下错误
客户端如下,
DB_library error:
        Attempt to initiate a new SQL Server operation with results pending.
服务器上错误如下:
A client process exited abnormally, or a network error was encountered. Unless other errors occurred, continue processing normally.
01:00000:00019:2003/12/19 10:05:34.45 server  Error: 1608, Severity: 18, State: 4
触发器代码如下:


CREATE TRIGGER CROSS.TRIG_PXDL ON CROSS.PXDL
   FOR UPDATE AS
DECLARE @PXDL_BH VARCHAR(32)
DECLARE @PXDL_BH_UPDATED VARCHAR(32)
DECLARE @PXDL_MC VARCHAR(32)
DECLARE @PXDL_MC_UPDATED VARCHAR(32)
DECLARE @PXDL_SSJSBH VARCHAR(32)
DECLARE @PXDL_SSJSBH_UPDATED VARCHAR(32)
DECLARE @PXDL_SSJSMC VARCHAR(32)
DECLARE @PXDL_SSJSMC_UPDATED VARCHAR(32)
DECLARE @IFBHUPDATED VARCHAR(32)
DECLARE @IFSSJSBHUPDATED VARCHAR(32)
DECLARE @PXDL VARCHAR(32)
DECLARE @COUNT INT

   IF UPDATE(BH)
        BEGIN
           SELECT @PXDL_BH = BH FROM deleted
           SELECT @PXDL_BH_UPDATED = BH FROM inserted
           select @COUNT=@@rowcount
           select @PXDL ='触发配线条数='+convert(char,@COUNT)
            print @PXDL

            declare cur_pxdl_bh cursor for
                select BH,SSJSBH,SSJSMC from deleted for update of BH,SSJSBH,SSJSMC
            declare cur_pxdl_bh_updated cursor for
                select BH,SSJSBH,SSJSMC from inserted for update of BH,SSJSBH,SSJSMC

           open cur_pxdl_bh
           fetch cur_pxdl_bh into @PXDL_BH,@PXDL_SSJSBH,@PXDL_SSJSMC
           open cur_pxdl_bh_updated
           fetch cur_pxdl_bh_updated into @PXDL_BH_UPDATED,@PXDL_SSJSBH_UPDATED,@PXDL_SSJSMC_UPDATED

           while (@@sqlstatus=0)
             begin
               if @PXDL_BH_UPDATED=@PXDL_BH
                begin
                  print '配线电缆编号没有改变'      
                end
               else
               begin  
                    UPDATE CROSS.DLD SET BH = @PXDL_BH_UPDATED+RIGHT(BH,4),SSDLBH=@PXDL_BH_UPDATED,
                        SSJSBH=@PXDL_SSJSBH_UPDATED,SSJSMC=@PXDL_SSJSMC_UPDATED WHERE SSDLBH = @PXDL_BH
                    UPDATE CROSS.JT SET BH = @PXDL_BH_UPDATED+RIGHT(BH,5),SSDLBH=@PXDL_BH_UPDATED,
                        SSJSBH=@PXDL_SSJSBH_UPDATED,SSJSMC=@PXDL_SSJSMC_UPDATED WHERE SSDLBH = @PXDL_BH
                    UPDATE CROSS.CABLETHREAD_CCPPORT SET OWERCABLE = @PXDL_BH_UPDATED WHERE OWERCABLE = @PXDL_BH
               end
               
               PRINT @PXDL_BH
               fetch cur_pxdl_bh into @PXDL_BH,@PXDL_SSJSBH,@PXDL_SSJSMC     
               fetch cur_pxdl_bh_updated into @PXDL_BH_UPDATED,@PXDL_SSJSBH_UPDATED,@PXDL_SSJSMC_UPDATED
             end

            if(@@sqlstatus=1)
            print "CHU CUO LE"
            if(@@sqlStatus=2)
            print "UPDATE COMPLETE"
            close cur_pxdl_bh
            close cur_pxdl_bh_updated
        END


  
    IF UPDATE(PXDLMC)
        BEGIN
            SELECT @PXDL_MC = PXDLMC FROM deleted
            SELECT @PXDL_MC_UPDATED = PXDLMC FROM inserted
            declare cur_pxdl cursor for
                select BH from inserted for update of BH

            open cur_pxdl
            fetch cur_pxdl into @PXDL_BH_UPDATED

            while (@@sqlstatus=0)
              begin
                if @PXDL_MC=@PXDL_MC_UPDATED
                begin
                    print '配线电缆名称没有改变'
                end
                else
                begin
                    UPDATE CROSS.DLD SET SSDLMC = @PXDL_MC_UPDATED WHERE SSDLBH = @PXDL_BH_UPDATED
                    UPDATE CROSS.JT SET SSDLMC = @PXDL_MC_UPDATED WHERE SSDLBH = @PXDL_BH_UPDATED
                    
                end
               
                PRINT @PXDL_BH
                fetch cur_pxdl into @PXDL_BH_UPDATED
              end

             if(@@sqlstatus=1)
             print "CHU CUO LE"
             if(@@sqlStatus=2)
             print "UPDATE COMPLETE"
             close cur_pxdl
        END

论坛徽章:
0
2 [报告]
发表于 2004-03-29 11:49 |只看该作者

触发器中使用游标导致1608号错误

怎么连一个人光顾都没有呀!请版主帮忙看看吧!

论坛徽章:
0
3 [报告]
发表于 2004-03-30 22:03 |只看该作者

触发器中使用游标导致1608号错误

帮忙看看吧!谢谢了。

论坛徽章:
0
4 [报告]
发表于 2004-04-01 09:47 |只看该作者

触发器中使用游标导致1608号错误

到现在我还没有搞明白是怎么回事?各位如果想关注的话,帮忙抬一抬。谢谢了。

论坛徽章:
0
5 [报告]
发表于 2004-04-26 22:25 |只看该作者

触发器中使用游标导致1608号错误

我研究了这么长时间发现了一点门路,就是sybase的向下兼容性实在是不敢恭维,因为我在11.9下面测试过一点问题都没有,但是到了12.0,看了文档,发现说是当打开了“组件集成服务”之后,对于inserted,deleted的操作就不行了;不知道11.9的文档里边有没有呀;至于1608号错误,是服务器把这个进程给中断了,由于长时间没有响应。
谢谢各位的关心,虽然没有解决但是依然结贴。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP