你的 while 内部,还应该有一个 FETCH NEXT FROM Cur INTO  
大概如下FETCH NEXT FROM Cur INTO 
while @@fetch_status = 0 
begin
-- to do FETCH NEXT FROM Cur INTO   -- 这个不能丢了,不然就是永远第一个值 。
end -- end while 

解决方案 »

  1.   

    能用,要善用事务
    要用goto 配合循环
    循环到出错数据时,是退出还是继续执行
      

  2.   

    RETURN--去掉
    在游标里用了没有循环,用goto跳过
      

  3.   

    WHILE @@fetch_status=0 
    BEGIN --print @BuildingType--开始事务
    BEGIN TRANSACTION
        SAVE TRANSACTION sp_Campus_TRANS--提交事务
    LABCOMMIT:
    IF (@@error = 0)
    BEGIN
    COMMIT TRANSACTION
    SET @Output=0
    GOTO success
    END--以下回滚事务
    LABROLLBACK:
    BEGIN
          --插入报警信息
    set @WarningMessage='学校数据:'+@CollegeNo+',编号:'+@DANo+',事务提交失败'
        insert  into  T_WarningMessage (DANo,DATime,CollegeNo,WarningType,Info)  values  (@DANo,@UpdateTime,@CollegeNo,'',@WarningMessage)ROLLBACK TRANSACTION sp_Campus_TRANSsuccess:
    commit TRANSACTION SET @Output=-1
    END
      

  4.   

    WHILE @@fetch_status=0 
    BEGIN 
     
    --print @BuildingType
     
    --开始事务
    BEGIN TRANSACTION
        SAVE TRANSACTION sp_Campus_TRANS
     
    --提交事务
    LABCOMMIT:
    IF (@@error = 0)
    BEGIN
        COMMIT TRANSACTION   --第一次提交事务

        SET @Output=0
        GOTO success
    END
     
    --以下回滚事务
    LABROLLBACK:
    BEGIN
          --插入报警信息
    set @WarningMessage='学校数据:'+@CollegeNo+',编号:'+@DANo+',事务提交失败'
        insert  into  T_WarningMessage (DANo,DATime,CollegeNo,WarningType,Info)  values  (@DANo,@UpdateTime,@CollegeNo,'',@WarningMessage)
     
    ROLLBACK TRANSACTION sp_Campus_TRANS
     
    success:
        commit TRANSACTION     --第二次提交事务问题:这里事务提交了两次啊???
      

     
        SET @Output=-1
    END
      

  5.   


    看你自己要什么效果,最外层有事务时才需要保存事务点,提交第2层事务再提交最外层事务,用save时首先要知道最外层有没有事务
      

  6.   

    IF @@TRANCOUNT>0 加判断
    WHILE @@fetch_status=0 
    BEGIN 
     
    --print @BuildingType
     
    --开始事务
    BEGIN TRANSACTION
        SAVE TRANSACTION sp_Campus_TRANS
     
    --提交事务
    LABCOMMIT:
    IF (@@error = 0)
    BEGIN
        COMMIT TRANSACTION
        SET @Output=0
        GOTO success
    END
     
    --以下回滚事务
    LABROLLBACK:
    BEGIN
          --插入报警信息
    set @WarningMessage='学校数据:'+@CollegeNo+',编号:'+@DANo+',事务提交失败'
        insert  into  T_WarningMessage (DANo,DATime,CollegeNo,WarningType,Info)  values  (@DANo,@UpdateTime,@CollegeNo,'',@WarningMessage)
     
    ROLLBACK TRANSACTION sp_Campus_TRANS
     
    success:
    IF @@TRANCOUNT>0
        commit TRANSACTION
     
        SET @Output=-1
    END