这个T-SQL存储过程写对了吗?
Is this T-SQL stored procedure written correctly?
我是 SQL 服务器和 T-SQL 的新手,但我确实有一些在 MS Access 中构建应用程序的经验。
当我从应用程序中执行此存储过程时它运行良好,但是当我在 SSMS 中调试它时,出现错误
Unable to Step. Invalid Operation.
但它可以让我逐步完成。根据我的研究,我似乎正在创造一个竞争条件,但我无法正确解决这个问题。我也很感激任何建议来优化这个或解决任何明显的问题。
代码的作用:
此代码用于将新客户输入数据库。第一个 select 语句查找现有 ID。如果 ID 为空,它将添加一个新客户。如果 ID 不为空,则不会添加客户。第二个 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
尝试用以下内容替换您的 IF 语句:
IF NOT EXISTS(SELECT ID FROM tblCustomer WHERE strUID = @pUID)
除了检查是否存在之外,您似乎没有使用@ID...并且您可以使用 ISNULL
函数来确保涵盖 NULL
个案例...
IF (ISNULL(@pName2,'') <> '') OR (ISNULL(@pName3,'') <> '')
HTH
戴夫
我是 SQL 服务器和 T-SQL 的新手,但我确实有一些在 MS Access 中构建应用程序的经验。
当我从应用程序中执行此存储过程时它运行良好,但是当我在 SSMS 中调试它时,出现错误
Unable to Step. Invalid Operation.
但它可以让我逐步完成。根据我的研究,我似乎正在创造一个竞争条件,但我无法正确解决这个问题。我也很感激任何建议来优化这个或解决任何明显的问题。
代码的作用:
此代码用于将新客户输入数据库。第一个 select 语句查找现有 ID。如果 ID 为空,它将添加一个新客户。如果 ID 不为空,则不会添加客户。第二个 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
尝试用以下内容替换您的 IF 语句:
IF NOT EXISTS(SELECT ID FROM tblCustomer WHERE strUID = @pUID)
除了检查是否存在之外,您似乎没有使用@ID...并且您可以使用 ISNULL
函数来确保涵盖 NULL
个案例...
IF (ISNULL(@pName2,'') <> '') OR (ISNULL(@pName3,'') <> '')
HTH
戴夫