[英]Stored procedure not displaying error message
我正在尝试编写一个接受运营商名字、姓氏和电话号码的存储过程,但如果名称已经在运营商表中,则会返回错误消息。
由于某种原因,当我添加一个已经存在的名称时,错误消息不会出现。 不知道如何解决这个问题
CREATE PROCEDURE AddCarrier
(@firstname VARCHAR(30),
@lastname VARCHAR(30),
@Phone CHAR(10))
AS
IF EXISTS (SELECT firstname, lastname, phone FROM carrier)
BEGIN
RAISERROR('There already is a firstname and lastname of that value', 16, 1)
END
ELSE
BEGIN
INSERT INTO Carrier (FirstName, LastName, Phone)
VALUES (@firstname, @lastname, @Phone)
END
GO
你需要一个WHERE
子句:
Create Procedure AddCarrier (
@firstname varchar(30),
@lastname varchar(30),
@Phone char(10)
) as
BEGIN
IF EXISTS (Select firstname,lastname, phone
from carrier c
where c.firstname = @firstname and
c.lastname = @lastname and
c.phone = @phone)
BEGIN
RaisError('There is already a firstname and lastname of that value',16,1)
END;
ELSE
Begin
insert into Carrier (FirstName,LastName, Phone)
values (@firstname, @lastname, @Phone)
END;
END;
然而,这是错误的做法。 而是创建一个唯一索引并捕获异常:
create unique index unq_carrier_3 on carrier(firstname, lastname, phone);
然后主体应该使用try
/ catch
块:
Create Procedure AddCarrier (
@firstname varchar(30),
@lastname varchar(30),
@Phone char(10)
) as
BEGIN
BEGIN TRY
insert into Carrier (FirstName,LastName, Phone)
values (@firstname, @lastname, @Phone);
END TRY
BEGIN CATCH -- you can check for the particular error here
RaisError('There is already a firstname and lastname of that value',16,1)
END CATCH;
END;
这更好的原因是因为数据库验证了数据的完整性——所以你知道数据是正确的。 在您的版本中,竞争条件实际上可能导致插入具有相同值的两行。
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> -- Add the parameters for the stored procedure here <@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, <@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0> AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- Insert statements for procedure here SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2> END GO
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.