2012-01-13 82 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关键字,你有,如果你使用它作为表名或列括号中的所有关键字。