将数据插入到外键链接的表中

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,它不会失败,这是错误答案的另一个原因-该方法不适合该问题。代码标签不是为了喂汤,而是为了让代码更具可读性。

以上是关于将数据插入到外键链接的表中的主要内容,如果未能解决你的问题,请参考以下文章

在mysql中创建两个用外键链接的表,插入、删除和更新

我有两个带外键的表,我想在第一个表中按下外键,第二个表出现数据

如果 RowID 链接到外键,则隐藏 Gridview 中的删除按钮 [关闭]

hibernate 在有主外键关系的表中插入数据

多表操作

postgresql - 计划将数据从 dblink 插入到本地表中