这个T-SQL存储过程是否正确写入?

时间:2016-04-12 15:13:22

标签: sql-server tsql if-statement stored-procedures race-condition

我是SQL Server和T-SQL的新手,但我确实有一些在MS Access中构建应用程序的经验。

当我从应用程序执行它时,此存储过程运行正常,但是当我在SSMS中调试它时,我收到错误

  

无法步骤。操作无效。

但它可以让我一步一步。根据我的研究,似乎我正在创造竞争条件,但我无法正确解决问题。我也很感激任何建议,以优化或解决任何明显的问题。

代码的作用:

此代码用于将新客户输入数据库。第一个select语句查找现有ID。如果ID为null,则会添加新客户。如果ID不为null,则不会添加客户。第二个IF语句也是如此,以便在插入这些值之前检查@pName2@pName3是否为空。

这是我的代码:

    @pUID nvarchar(16) = null, 
    @pName1 nvarchar(50) = null,
    @pName2 nvarchar(50) = null,
    @pName3 nvarchar(50) = null,
    @pAddress1 nvarchar(30) = null,
    @pAddress2 nvarchar(30) = null,
    @pAddress3 nvarchar(30) = null,
    @pZipCode nvarchar(30) = null
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @ID INT
    SELECT @ID = ID FROM tblCustomer WHERE strUID = @pUID

    IF @ID IS NULL
    BEGIN 
        DECLARE @Customer_ID INT

        INSERT INTO tblCustomer(strUID, strName)
        VALUES(@pUID, @pName1)

        SET @Customer_ID = @@IDENTITY

        IF (@pName2 <> '') OR (@pName3 <> '')
        BEGIN
            INSERT INTO tblSecondaryCustomer(CustomerID, strName2, strName3)
            VALUES(@Customer_ID, @pName2, @pName3)
        END

        INSERT INTO tblAddress(CustomerID, strAddress1, strAddress2, strAddress3, strZipCode)
        VALUES(@Customer_ID, @pAddress1, @pAddress2, @pAddress3, @pZipCode)
    END
END

1 个答案:

答案 0 :(得分:0)

尝试使用以下内容替换您的IF语句:

IF NOT EXISTS(SELECT ID FROM tblCustomer WHERE strUID = @pUID)

使用@ID似乎不是检查存在...而且您可以使用ISNULL函数来确保涵盖NULL个案例......

IF (ISNULL(@pName2,'') <> '') OR (ISNULL(@pName3,'') <> '')

HTH

戴夫