将数据插入到外键链接的表中
Posted
技术标签:
【中文标题】将数据插入到外键链接的表中【英文标题】:Insert data into tables linked with foreign key 【发布时间】:2012-01-13 17:41:28 【问题描述】:首先我尝试了这个Insert Data Into Tables Linked by Foreign Key 并没有得到答案。
我有 3 张桌子:
表格:客户
ID -------LastName-------FirstName-------PhoneNumber
表格:顺序
ID-------Status-------CustomerID
表格:OrderLine
ID-------OrderID-------Product-------Quantity-------PricePerUnit
我运行以下查询
SqlCommand myCommand2 =
new SqlCommand(@"INSERT INTO Order (Status, CustomerID)
VALUES(13016, SELECT ID FROM Customers WHERE FirstName = 'Garderp')",
myConnection);`
它会抛出异常
Order 附近的语法错误
如何在 SQL Server 2008 中使用外键将数据添加到表中,尤其是在这种特殊情况下?
【问题讨论】:
仅供参考,您只能接受一个答案 :) 我认为 Icarus 拥有最完整的答案。 【参考方案1】:ORDER
是 SQL Server 中的保留关键字(用于ORDER BY
操作)。
您需要用方括号分隔该名称:
"INSERT INTO [Order] (Status, CustomerID) VALUES "
这将导致 SQL Server 将其视为对象名称,而不是将其读取为关键字。
【讨论】:
【参考方案2】:应该是:
SqlCommand myCommand2 = new SqlCommand(@"INSERT INTO [Order] (Status, CustomerID) "
+ " SELECT 13016, ID
FROM Customers
WHERE FirstName = 'Garderp')"
, myConnection);
【讨论】:
您的 SQL 语句缺少 (【参考方案3】:顺序是SQL中的关键字,如果使用它作为表名或列,则必须将所有关键字括起来。
【讨论】:
【参考方案4】:尝试使用此查询
INSERT INTO [Order]
( Status, CustomerID )
SELECT 13016, ID
FROM Customers
WHERE FirstName = 'Garderp'
【讨论】:
【参考方案5】:SqlCommand myCommand2 = new SqlCommand(@"INSERT INTO Order
(Status, CustomerID)
VALUES " + "(13016,
(SELECT ID FROM Customers WHERE FirstName = 'Garderp'))", myConnection);
【讨论】:
【参考方案6】:试试这个
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 - 您已经提供了 20 个答案,此时应该知道如何标记代码。 这也是一个糟糕的答案,因为您没有考虑将保留字用作表名,并且TOP 1
将丢弃他可能想要的其他结果。
如果你不使用 top 1 并且有多行,查询将失败。你看起来像个新手。不,我不知道如何格式化代码。我相信如果你有技能,你不需要勺子喂
实际上,如果您将其设为SELECT 13016, id from customers
,它不会失败,这是错误答案的另一个原因-该方法不适合该问题。代码标签不是为了喂汤,而是为了让代码更具可读性。以上是关于将数据插入到外键链接的表中的主要内容,如果未能解决你的问题,请参考以下文章
我有两个带外键的表,我想在第一个表中按下外键,第二个表出现数据