T-SQL 存储过程:更新 IF/ELSE 语句内的局部变量
T-SQL stored procedure: update local variable inside IF/ELSE statement
我有一个 item
table,它有一个引用 customer
table 的外键约束 customer_id
。 customer_id
列的类型为 uniqueidentifier
,需要在插入时生成(我们无法使用客户端提供的值)。我创建了一个 T-SQL(使用 SQL Server Express)存储过程,使用 ADO 实体数据模型从 C# 调用以将记录添加到数据库。
objective 是通过使用已声明的 @customer_id
变量创建一个引用现有客户记录或新创建的客户记录的项目(如果它不存在) .
下面是我的存储过程的简化版本。
CREATE PROCEDURE dbo.uspInsertRecord
@serial_num AS INT,
@customer_address AS VARCHAR(30)
AS
DECLARE @customer_id AS UNIQUEIDENTIFIER;
IF NOT EXISTS (SELECT 1 FROM dbo.customer WHERE address = @customer_address)
BEGIN
SET @customer_id = NEWID()
INSERT INTO dbo.customer (customer_id, customer_address)
VALUES (@customer_id, @customer_address)
END
ELSE
BEGIN
SELECT @customer_id = customer_id
FROM dbo.customer
WHERE customer_id = @customer_id
END
IF NOT EXISTS (SELECT 1 FROM dbo.item WHERE serial_num = @serial_num)
BEGIN
INSERT INTO dbo.item (serial_num, customer_id)
VALUES (@serial_num, @customer_id)
END
此过程适用于新创建的客户记录,但不适用于引用现有客户记录。
尝试添加具有现有关联 customer_id
的项目会抛出
SqlException: Cannot insert the value NULL into column 'customer_id', table 'dbo.item'
我对 T-SQL 还很陌生,但这似乎是一个范围问题。有什么想法吗?
INSERT INTO dbo.customer (@customer_id);
在您的第一个 IF
块中不是正确的 SQL 语句。相反:
INSERT INTO dbo.customer (customer_id) VALUES (@customer_id);
您的第二个 INSERT
语句也有同样的问题。这里的格式是:
INSERT INTO dbo.item (serial_num, customer_id)
VALUES (@serial_num, @customer_id);
您的 WHERE
子句似乎有误
SELECT @customer_id = customer_id
FROM dbo.customer
WHERE address = @customer_address -- not @customer_id
我有一个 item
table,它有一个引用 customer
table 的外键约束 customer_id
。 customer_id
列的类型为 uniqueidentifier
,需要在插入时生成(我们无法使用客户端提供的值)。我创建了一个 T-SQL(使用 SQL Server Express)存储过程,使用 ADO 实体数据模型从 C# 调用以将记录添加到数据库。
objective 是通过使用已声明的 @customer_id
变量创建一个引用现有客户记录或新创建的客户记录的项目(如果它不存在) .
下面是我的存储过程的简化版本。
CREATE PROCEDURE dbo.uspInsertRecord
@serial_num AS INT,
@customer_address AS VARCHAR(30)
AS
DECLARE @customer_id AS UNIQUEIDENTIFIER;
IF NOT EXISTS (SELECT 1 FROM dbo.customer WHERE address = @customer_address)
BEGIN
SET @customer_id = NEWID()
INSERT INTO dbo.customer (customer_id, customer_address)
VALUES (@customer_id, @customer_address)
END
ELSE
BEGIN
SELECT @customer_id = customer_id
FROM dbo.customer
WHERE customer_id = @customer_id
END
IF NOT EXISTS (SELECT 1 FROM dbo.item WHERE serial_num = @serial_num)
BEGIN
INSERT INTO dbo.item (serial_num, customer_id)
VALUES (@serial_num, @customer_id)
END
此过程适用于新创建的客户记录,但不适用于引用现有客户记录。
尝试添加具有现有关联 customer_id
的项目会抛出
SqlException: Cannot insert the value NULL into column 'customer_id', table 'dbo.item'
我对 T-SQL 还很陌生,但这似乎是一个范围问题。有什么想法吗?
INSERT INTO dbo.customer (@customer_id);
在您的第一个 IF
块中不是正确的 SQL 语句。相反:
INSERT INTO dbo.customer (customer_id) VALUES (@customer_id);
您的第二个 INSERT
语句也有同样的问题。这里的格式是:
INSERT INTO dbo.item (serial_num, customer_id)
VALUES (@serial_num, @customer_id);
您的 WHERE
子句似乎有误
SELECT @customer_id = customer_id
FROM dbo.customer
WHERE address = @customer_address -- not @customer_id