Sql-Server

插入數據時自動增加與SQL中父表的主鍵相同的外鍵值?

  • December 14, 2018

我在 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 注入攻擊的風險。

引用自:https://dba.stackexchange.com/questions/224986