-1
我在SQL Server 我必須代碼初學者解決方案是,嵌套插入使用承諾和SQL Server回滾兩個表2008
我有兩個表。我使用存儲過程將記錄插入到這些表中。存儲過程具有輸入參數,如@name
,@age
,@firstname
和@lastname
。
我必須將@name
和@age
插入第一個表(如果條件年齡> 18)。和@firstname
,@lastname
和@age
到第二表(如果條件年齡> 20)。
如果任何條件或插入失敗的方式,所有的變化應該否則提交回滾應該發生。
我的問題是隻有在所有時間都引發外部catch catch塊raiserror。
這是我的代碼。
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
此處還指出任何不必要的代碼。
在此先感謝。
@MitchWheat對不起,我不能讓你。其實我沒有在這裏使用任何觸發器。 – Vanjith 2014-09-25 10:31:44
我的意思是使用檢查約束,而不是一個過程,對不起。 – 2014-09-25 10:59:30
好米奇小麥。但我有條件使用存儲過程只有:-(。 – Vanjith 2014-09-25 12:42:51