私はSQLサーバーの初心者です。シナリオを解決するためにコーディングする必要があります。
私は2つのテーブルを持っています。そして、ストアド プロシージャを使用してこれらのテーブルにレコードを挿入しています。ストアド プロシージャには、@name
、@age
、などの入力パラメータが@firstname
あり@lastname
ます。
@name
最初のテーブルにandを挿入する必要があり@age
ます (状態が 18 歳を超える場合)。そして@firstname
、@lastname
そして@age
2 番目のテーブルに (状態の年齢が 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
また、ここで不要なコードを指摘してください。
前もって感謝します。