我是 sql server 的初学者,我必须编写代码来解决这种情况,
我有两张桌子。我正在使用存储过程将记录插入这些表中。存储过程具有输入参数,例如@name
、和。@age
@firstname
@lastname
我必须插入@name
第@age
一个表(如果条件年龄> 18)。和@firstname
,@lastname
并@age
进入第二个表(如果条件年龄 > 20)。
如果任何条件或插入失败意味着所有更改都应回滚,否则应发生提交。
我的问题只是外部捕获块 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
还要在这里指出任何不必要的代码。
提前致谢。