我有一個item表,它有一個外鍵約束customer_id,它參考一個customer表。customer_id列的型別是uniqueidentifier,它需要在插入時生成(客戶沒有提供我們可以使用的值)。我創建了一個T-SQL(使用SQL Server Express)存盤程序,該存盤程序將使用ADO物體資料模型從C#中呼叫,以向資料庫添加記錄。
目標是通過使用已宣告的@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)
結束。
ELSE
BEGIN BEGIN
SELECT @customer_id = customer_id
FROM dbo.customer
WHERE customer_id = @customer_id
END
如果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。不能將數值NULL插入到'customer_id'列,表'dbo.item'。
我對T-SQL相當陌生,但這似乎是一個范圍問題。有什么想法嗎?
uj5u.com熱心網友回復:
INSERT INTO dbo.customer (@customerid) 。
在你的第一個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) 。
uj5u.com熱心網友回復:
看起來你有錯誤的WHERE子句
SELECT @customer_id = customer_id
FROM dbo.customer
WHERE address = @customer_address -- not @customer_id
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/311053.html
標籤:
