我有包含文本框的注册表单(asp.net)。其中一个是电子邮件文本框。和iam使用Linq To SQL。 我一直在编写禁止重复的程序
CREATE PROCEDURE CheckEmail ( @email NVARCHAR(50) )
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS ( SELECT C.Email
FROM Customer C
WHERE Email = @email )
BEGIN
INSERT INTO Customer
( Email )
VALUES ( @email )
END
ELSE
BEGIN
ROLLBACK TRANSACTION
END
END
这是一个好方法吗?我该如何返回错误?
答案 0 :(得分:0)
您可以使用RAISEERROR()
函数返回错误。另外,因为您从未尝试插入重复的电子邮件,因此您不需要ROLLBACK
CREATE PROCEDURE CheckEmail ( @email NVARCHAR(50) )
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS ( SELECT C.Email
FROM Customer C
WHERE Email = @email )
BEGIN
INSERT INTO Customer
( Email )
VALUES ( @email )
END
ELSE
BEGIN
DECLARE @ErrorMessage VARCHAR(100) = 'ERROR: Attempt to insert duplicate email address'
RAISERROR (@ErrorMessage,11,1)
RETURN
END
END
假设您使用sql-server,如果您使用的是其他DBMS,则只需查看系统的错误函数。
注意:当您返回SQL Error时,您需要确保应用程序代码知道如何处理它而不仅仅是崩溃。