-1

私はSQLサーバーの初心者です。シナリオを解決するためにコーディングする必要があります。

私は2つのテーブルを持っています。そして、ストアド プロシージャを使用してこれらのテーブルにレコードを挿入しています。ストアド プロシージャには、@name@age、などの入力パラメータが@firstnameあり@lastnameます。

@name最初のテーブルにandを挿入する必要があり@ageます (状態が 18 歳を超える場合)。そして@firstname@lastnameそして@age2 番目のテーブルに (状態の年齢が 20 を超える場合)。

条件または挿入のいずれかが失敗した場合、すべての変更はロールバックされる必要があり、それ以外の場合はコミットが発生する必要があります。

私の問題は、常に外側のキャッチブロックレイザーエラーのみが発生することです。

これが私のコードです。

ALTER PROCEDURE [dbo].[sample]
   @name varchar(10),
   @age int,
   @fn varchar(10),
   @ln varchar(10)
AS
BEGIN
    Declare @errormsg NVARCHAR(4000), @errormsg2 NVARCHAR(4000)


    BEGIN TRY
       IF(@age > 18)
       BEGIN
           BEGIN TRANSACTION 
                insert into employee 
                values(@name, @age)

                begin try
                   if(@age > 20)
                   begin
                      begin transaction
                          insert into empdet 
                          values(@fn, @ln, @age)

                          commit
                   end  
                   else
                   begin
                       RAISERROR (@errormsg2, 16, 1);
                   end
                end try
                begin catch
                    IF @@TRANCOUNT > 0
                    begin
                         ROLLBACK
                    end

                    SET @errormsg2 = 'inner catch Error:Age is less than 20'
                    RAISERROR (@errormsg2, 16, 1);
                end catch   

                COMMIT
            END
            ELSE 
            BEGIN
                RAISERROR (@errormsg, 16, 1);
            END             
        end try
        BEGIN CATCH
            IF @@TRANCOUNT > 0
            begin
                ROLLBACK
            end 

            SELECT @errormsg = 'Outer catch Error:Age is less than 18 '+cast(@age as varchar);
            RAISERROR (@errormsg, 16, 1);
        END CATCH
    END

また、ここで不要なコードを指摘してください。

前もって感謝します。

4

1 に答える 1