插入數據時自動增加與SQL中父表的主鍵相同的外鍵值?
我在 Microsoft SQL Server 中有以下兩個連接的表,如下所示。
從 Visual Studio 插入數據時,Reservations 表 ( Customer_ID ) 中的****外鍵應自動遞增,並且與父表 Customer_Info ( Customer_ID ) 的****主鍵具有相同的值。
我應該通過 Visual Studio 中的 SQL 語句來完成,還是可以直接在數據庫中完成?我該怎麼做?謝謝
Visual Studio Windows 窗體應用程序設計:
點擊按鈕時的 SQL 語句:
var query = "insert into Customer_info(Customer_Name,Customer_Phone) " + "values('" + name + "','" + phone + "');" + " insert into Reservations(RV_DAY,Customer_ID,Table_Arrangement,RV_OT,RV_PW,RV_SIOC) " + "values('" + day + "',50,'" + tb + "','" + SR1 + "','" + SR2 + "','" + SR3 + "');";
Visual Studio 異常錯誤:
聽起來您對這些關係的運作方式有些誤解。
對於父表,
Customer_Info
您的插入語句將如下所示:INSERT INTO Customer_Info (Customer_Name, Customer_Phone) VALUES ('csandreas1', '555-5555');
請注意,我沒有包含 CustomerID 欄位。只要您將此設置為 IDENTITY 欄位,它將按照您描述的方式自動遞增。
現在這是子表 Reservations 的插入:
INSERT INTO Reservations (RV_DAY, Customer_ID, Table_Arrangement, RV_OT, RV_PW, RV_SIOC) VALUES ('', 5, '', '', '', '');
請注意,除了 Customer_ID,我將所有其他列留空,只是因為我真的不知道它們是什麼。
因此,在插入 Reservations 表時,您需要明確指出
Customer_Info
與該預留關聯的行。SQL Server 將在插入過程中驗證 Customer_Info 中確實存在 ID 為 5 的行。
關於您的程式碼,您需要先執行插入到 Customer_Info,然後獲取生成的 CustomerID,然後再插入到 Reservation 表中。
SCOPE_IDENTITY()
您可以使用T-SQL 函式獲取插入的值。在上面的範常式式碼中,您可以將“50”替換為“SCOPE_IDENTITY()”,以插入剛剛添加的客戶記錄的 CustomerID。作為關於您的 .NET 程式碼的一個非常重要的附註,您永遠不應該將使用者輸入與 SQL 字元串連接起來。使用 SqlCommand 對象,然後添加參數。網上有很多這樣的例子,在這裡查看一個。
執行您正在執行的操作會使您面臨SQL 注入攻擊的風險。