我想要做的是创建一个执行insert语句的存储过程。由于表Employee的检查约束,执行失败的可能性。在这种情况下,我想处理用户定义的错误。显然,以下过程无法正常工作,因为它总是会引发我的错误,但不仅仅是在插入失败时。
EXEC sp_addmessage 50001, 16, N'Title must be one of the following - Captain,Engineer,Flight-attendant,Purser,First-officer';
CREATE PROCEDURE InsertIntoEmployee
@firstName nvarchar(30),
@familyName nvarchar(30),
@title nvarchar(50),
@address nvarchar(50),
@chiefID int ,
@salary money ,
@FK_IDCrew int,
@FK_DepartmentID int
AS
BEGIN
declare @err_num int;
declare @err_sev int;
declare @err_msg int;
begin try
insert into Employee(firstName, familyName, title, address, chiefID, salary, FK_IDCrew,
FK_DepartmentID)
values(@firstName, @familyName, @title, @address, @chiefID, @salary, @FK_IDCrew,
@FK_DepartmentID);
raiserror(50001,16,1);
END try
begin catch
set @err_num=ERROR_NUMBER();
set @err_sev=ERROR_SEVERITY();
set @err_msg=ERROR_STATE();
raiserror(@err_num,@err_sev,@err_msg);
end catch
end
GO
答案 0 :(得分:0)
在这种情况下:
您的代码也将始终点击RAISERROR,不会添加任何值,
答案 1 :(得分:0)
我希望参数列表中提到的尺寸是sycn,表格列长度。
在插入之前,您应该检查以下几点。
检查表中是否存在 @FK_IDCrew 值。
检查表中是否存在 @FK_DepartmentID 值。
应该如下所示。
If Not Exists(Select IDCrewColumnName From Table Where columnName = @FK_IDCrew)
Begin
return here from the stored procedure.
End
如果其中任何一个不符合条件,您应向用户显示一些用户友好的消息
(a)船员ID ,您要插入,删除或在数据库中不存在。
(b) DepartmentID ,您要插入,删除或在数据库中不存在。
通过这种方式,错误的可能性也将结束。