我如何创建程序以禁止重复的电子邮件?

时间:2014-04-14 18:59:06

标签: sql linq

我有包含文本框的注册表单(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
这是一个好方法吗?我该如何返回错误?

1 个答案:

答案 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

假设您使用,如果您使用的是其他DBMS,则只需查看系统的错误函数。

注意:当您返回SQL Error时,您需要确保应用程序代码知道如何处理它而不仅仅是崩溃。