存储过程流程判断

存储过程如下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[SP_TableName_Save]
    (
      @Id BIGINT = 0 ,
      @Id_T1 BIGINT = 0 ,
      @IsOk NVARCHAR(10) ,
      @InfoState_T1 INT ,
      @MSG VARCHAR(255) = '' OUTPUT
    )
AS
    BEGIN
        SET NOCOUNT ON
        SET XACT_ABORT ON
        BEGIN TRAN       
          
        DECLARE @A VARCHAR(10)= ''
        DECLARE @B VARCHAR(10)= ''
        DECLARE @Id_T1Old BIGINT
        DECLARE @InfoState_T1Old INT
         
        SELECT  @Id_T1Old = Id_T1 ,
                @InfoState_T1Old = InfoState_T1
        FROM    [T2]
        WHERE   Id_T2 = @Id_T2
                
     
   
        IF ( @Id_T2 = 0
             AND @IsOk = '通过'
           ) --新增                   
            BEGIN
                SET @A = '1';
                SET @B = '1';
            END
        ELSE --修改
            BEGIN
                IF ( @IsOk = '通过' )
                    BEGIN
                        IF ( @Id_T1 <> @Id_T1Old )
                            BEGIN
                                SET @A = '3' + '1'
                                SET @B = '2'
                            END                 
                        ELSE
                            BEGIN
                                SET @A = '1'
                                SET @B = '2'
                            END
                    END
                ELSE --不通过
                    BEGIN
                        IF ( @Id_T1 <> @Id_T1Old )
                            BEGIN
                                SET @A = '3' + '4'
                                SET @B = '2'
                            END                 
                        ELSE
                            BEGIN
                                SET @A = '4'
                                SET @B = '2'
                            END
                    END                   
            END 
          
            
        IF @A LIKE '%1%'
            DELETE  dbo.[T1]
            WHERE   Id_T1 = @Id_T1
        IF @A LIKE '%2%'
            UPDATE  dbo.[T1]
            SET     InfoState_T1 = '标记删除'
            WHERE   Id_T1 = @Id_T1                            
        IF @A LIKE '%3%'
            UPDATE  dbo.[T1]
            SET     InfoState_T1 = @InfoState_T1Old
            WHERE   Id_T1 = @Id_T1Old            
        IF @A LIKE '%4%'
            UPDATE  dbo.[T1]
            SET     InfoState_T1 = @InfoState_T1
            WHERE   Id_T1 = @Id_T1
                            
            
        IF @B = '1'
            BEGIN                       
                        
                INSERT  INTO [dbo].[T2]
                        ( Id_T1, IsOK, InfoState_T1 )
                VALUES  ( @Id_T1, @IsOk, @InfoState_T1 )
                SET @Id_T2 = SCOPE_IDENTITY()
            END
        ELSE
            UPDATE  [dbo].[T2]
            SET     Id_T1 = @Id_T1 ,
                    IsOK = @IsOk ,
                    InfoState_T1 = @InfoState_T1
            WHERE   Id_T2 = @Id_T2
                    AND Id_T1 = @Id_T1                           
        COMMIT TRAN
        RETURN @@ERROR
    END
    

本次记录不是研究业务逻辑开发,而是个人觉得这种写法方便阅读,修改

原文地址:https://www.cnblogs.com/oyer/p/5657507.html