--         ( - -    . . . )                  
--         
--         (--...)            ǘ (   )    

--------------------------------------
--       ǘ   
--@Msg = -1           
--@Msg = -2      ј        
--@Msg = -3      
--@Msg = -5   
--------------------------------------
--msg-num = -6    ǘ   
--msg-num = -7         
--msg-num = -5  

CREATE PROCEDURE [dbo].[Create_Account_Force_Code]
    @msg_num BIGINT OUTPUT ,
    @Class SMALLINT ,
    @Acc_Name NVARCHAR(90) ,
    @Tmp_Code VARCHAR(15) ,
    @UserId SMALLINT
AS
    DECLARE @TmpP_Code_Parent VARCHAR(20)
    DECLARE @TmpP_Code VARCHAR(20)
--    
    IF ( SELECT COUNT(*)
         FROM   Account
         WHERE  Class = @Class
                AND Force_Code = 1
       ) = 0
        BEGIN
            SET @msg_num = -6  --msg-num = -6    ǘ   
            RETURN @msg_num
        END
    ELSE
        BEGIN
--   ݍ  ǘ
            DECLARE C_Code CURSOR
            FOR
                SELECT  Acc_Code
                FROM    dbo.Account
                WHERE   Class = @Class

            OPEN C_Code


            FETCH NEXT FROM C_Code
    INTO @TmpP_Code_Parent

            BEGIN TRAN 
  
            WHILE @@FETCH_STATUS = 0
                BEGIN 
                    SET @TmpP_Code = dbo.Test_Acc_Code(@TmpP_Code_Parent,
                                                       @Tmp_Code) --    
                    IF @TmpP_Code = '-3'
                        BEGIN
                            SET @msg_num = -3 
                            --GOTO Error_Lable2
                            CLOSE C_Code
                            DEALLOCATE  C_Code
                            ROLLBACK TRANSACTION 
                            RETURN   @msg_num                   
                        END
                    EXEC @Msg_num= Acount_New @Msg_Num, @TmpP_Code, @Acc_Name,
                        0, NULL, 0, 0, 0, 0, 0, @UserId
                    IF @@Error > 0
                        BEGIN                    
                        --GOTO Error_Lable        
                            SET @msg_num = -5
                            CLOSE C_Code
                            DEALLOCATE  C_Code
                            ROLLBACK TRANSACTION
                            RETURN   @msg_num                     
                        END
                    IF @msg_num < 0
                        BEGIN
                            --GOTO Error_Lable2
                            CLOSE C_Code
                            DEALLOCATE  C_Code
                            ROLLBACK TRANSACTION 
                            RETURN   @msg_num         
                        END 
                    ELSE
                        BEGIN
                            IF ( SELECT COUNT(Acc_Code)
                                 FROM   dbo.Acc_link
                                 WHERE  Acc_Code = @Tmp_Code
                               ) > 0
                                BEGIN
                                    SET @msg_num = -7  
                                    --GOTO Error_Lable2
                                    CLOSE C_Code
                                    DEALLOCATE  C_Code
                                    ROLLBACK TRANSACTION 
                                    RETURN   @msg_num     
                                END
                            ELSE
                                BEGIN
                                    INSERT  INTO dbo.Acc_link
                                            ( Code ,
                                              Acc_Code ,
                                              Class ,
                                              Acc_Parent_Code
                                            )
                                    VALUES  ( @Tmp_Code ,
                                              @TmpP_Code ,
                                              @Class ,
                                              @TmpP_Code_Parent
                                            ) 
                                    IF @@Error > 0
                                        BEGIN
                                        --GOTO Error_Lable        
                                            SET @msg_num = -5  
                                            CLOSE C_Code
                                            DEALLOCATE  C_Code
                                            ROLLBACK TRANSACTION 
                                            RETURN   @msg_num     
                                        END
                                END
                        END
                    FETCH NEXT FROM C_Code
        INTO @TmpP_Code_Parent
                END

            CLOSE C_Code
            DEALLOCATE  C_Code
            COMMIT TRAN 
            RETURN @msg_num
        END