2012-01-13 112 views
1

首先的鏈接表我想這Insert Data Into Tables Linked by Foreign Key並沒有得到答案。插入數據與外鍵

我有3個表:

表:客戶

ID -------LastName-------FirstName-------PhoneNumber 

表:訂購

ID-------Status-------CustomerID 

表:訂單行

ID-------OrderID-------Product-------Quantity-------PricePerUnit 

我運行下面的查詢

SqlCommand myCommand2 = 
    new SqlCommand(@"INSERT INTO Order (Status, CustomerID) 
        VALUES(13016, SELECT ID FROM Customers WHERE FirstName = 'Garderp')", 
        myConnection);` 

,並拋出異常

語法近的順序

如何添加數據到表中的SQL Server外鍵錯誤2008年特別是在這種特殊情況下?

+0

FYI,你只能接受一個答案:)我認爲伊卡洛斯擁有最齊全的企業之一。 – JNK 2012-01-13 17:58:45

+0

好吧,TNX的信息:) – Bip 2012-01-13 18:10:04

回答

4

它應該是:

SqlCommand myCommand2 = new SqlCommand(@"INSERT INTO [Order] (Status, CustomerID) " + " SELECT 13016, ID FROM Customers WHERE FirstName = 'Garderp')", myConnection); 
+0

你的SQL語句缺少( – thang 2016-02-24 06:41:40

5

ORDER是SQL Server中的保留關鍵字(用於ORDER BY操作)。

您需要界定這個名字用方括號:

"INSERT INTO [Order] (Status, CustomerID) VALUES "

這將導致SQL Server把它當作一個對象名稱,而不是讀它作爲關鍵字。

0

嘗試使用此查詢

INSERT INTO [Order] 
(Status, CustomerID) 
SELECT 13016, ID 
    FROM Customers 
    WHERE FirstName = 'Garderp' 
-2

試試這個

SqlCommand myCommand2 = new SqlCommand(@"INSERT INTO Order (Status, CustomerID) VALUES " + "(13016, SELECT ID FROM Customers WHERE FirstName = \'Garderp\')", myConnection); 

如果有一個以上的客戶名稱爲 「Gardep」,此查詢會失敗。您只需選擇一條記錄。使用TOP將在這裏一個更好的主意

SqlCommand myCommand2 = new SqlCommand(@"INSERT INTO Order (Status, CustomerID) VALUES " + "(13016, SELECT TOP 1 ID FROM Customers WHERE FirstName = \'Garderp\')", myConnection); 
+1

-1 - 您提供20個答案,應該知道如何在這一點上標記代碼 – JNK 2012-01-13 17:48:20

+1

而且這是一個不好回答,因爲你不知道帳戶。爲保留字作爲表名,和'TOP 1'將放棄額外的結果,他可能希望。 – JNK 2012-01-13 18:01:25

+0

如果u不使用前1並有多個行,查詢將失敗。 你看起來像一個新手。而NO ,我不知道如何格式化代碼。我相信如果你有技能,你不需要勺子餵養 – 2012-01-17 12:03:24

0
SqlCommand myCommand2 = new SqlCommand(@"INSERT INTO Order 
(Status, CustomerID) 
VALUES " + "(13016, 
(SELECT ID FROM Customers WHERE FirstName = 'Garderp'))", myConnection); 
2

順序是SQL關鍵字,你有,如果你使用它作爲表名或列括號中的所有關鍵字。