微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SqlServer 较可以学习的存储过程 对事务,出现错误的导向

ALTER    PROCEDURE usp_XXXXXX (@DateFrom VARCHAR(20),@Dateto VARCHAR(20)) AS  DECLARE @pltID VARCHAR(20)        --Pallet ID DECLARE @CTNID VARCHAR(30)        --Carton ID DECLARE @intError INT DECLARE @strsql  NVARCHAR(3000) DECLARE @Cnt INT SET @CTNPERplt=100   SET @Cnt=0 DECLARE plt_cursor CURSOR SCROLL FOR   SELECT disTINCT PalletNo FROM ****  WITH(NOLOCK)  order by palletno OPEN plt_cursor FETCH NEXT FROM plt_cursor INTO @pltID WHILE @@FETCH_STATUS=0  BEGIN     SELECT TOP 1 @SNQTYONplt=Qty,@PN=PN,@SO=SO,@shipment=shipment,@mfdate=mfdate,@timein=timein FROM ****  WITH(NOLOCK) WHERE ****     IF LEN(@SNQTYONplt)=0 OR LEN(@PN)=0 OR LEN(@SO)=0 OR LEN(@shipment)=0 OR LEN(@mfdate)=0 OR LEN(@timein)=0  BEGIN RAISERROR ('Some Column is NULL.',16,1) SET @intError=0 GOTO Err_Handle END     BEGIN TRAN     SET @strsql='INSERT INTO ****'     SET @strsql=@strsql +'****'     EXEC @intError=SP_EXECUTEsql @strsql     IF @intError <> 0     BEGIN GoTo Err_Handle     END     SET @CTNSEQ=1     IF UPPER(LEFT(Rtrim(Ltrim(@PN)),2))='9B'  BEGIN         DECLARE CTN_cursor CURSOR SCROLL FOR                  SELECT **** FROM **** WHERE trid IN (****)         OPEN CTN_cursor         FETCH NEXT FROM CTN_cursor                 INTO @CurCTNID                         WHILE @@FETCH_STATUS=0  BEGIN BEGIN TRAN             SELECT @SNQTYONCTN=count(*) FROM **** WHERE carton=@CurCTNID     SET @strsql='INSERT INTO ****'     SET @strsql=@strsql +'****' EXEC @intError=SP_EXECUTEsql @strsql   IF @intError <> 0     BEGIN    GoTo Err_Handle     END SET @CTNSEQ=@CTNSEQ+1   END           CLOSE SN_cursor    DEALLOCATE SN_cursor  IF @@trancount<>0 BEGIN             COMMIT TRAN END         FETCH NEXT FROM CTN_cursor       INTO @CurCTNID           END CLOSE CTN_cursor DEALLOCATE CTN_cursor GOTO Newplt         END Newplt: UPDATE **** SET **** WHERE ****     IF @@ERROR<>0    GOTO Err_Handle     ELSE IF @@trancount<>0 BEGIN COMMIT TRAN END       FETCH NEXT FROM plt_cursor  INTO @pltID          SET @Cnt=@Cnt+1 END     IF @@ERROR<>0    GOTO Err_Handle     ELSE IF @@trancount<>0 BEGIN            COMMIT TRAN END     CLOSE plt_cursor      DEALLOCATE plt_cursor  RETURN 0 Err_Handle:     IF @@trancount<>0 BEGIN            ROLLBACK TRAN END     RETURN @@ERROR

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐