为什么我不能更新这个表?

时间:2010-12-03 04:37:54

标签: sql sql-server-2008 foreign-keys

我在SQL Server 2008 R2中有三个表:Country AddressCountry_Address


Country有列:

CountryID Country

1,阿富汗

2,澳大利亚


Address有列:

AddressID Address

1,5 Smith Way


Country_Address有列:

CountryID AddressID

1,1

编辑:所以在这个例子中,5 smith way是阿富汗的地址。

我清空了表格,然后添加了两个国家/地区和一个地址,然后在Country_Address中添加了1到1之间的链接。当我尝试将CountryID从1更新为2时,我可以因为FK约束。我不明白为什么会这样,因为我试图分配的CountryID确实存在。那么我该如何设法更新呢?


edit1 :这是我在SQL Management Studio中尝试进​​行更新时遇到的错误,我得到InvalidOperationException - “类型'的模型......'不能得到更新。“在Visual Studio中。

  

没有更新行。

     

第1行中的数据未提交。   错误来源:.Net SqlClient数据   供应商。错误消息:更新   声明与FOREIGN冲突   关键约束   “FK_Country_Address_Address”。该   数据库中发生冲突   “......”,表   “dbo.Address”,列'AddressID'。

     

声明已经终止。

2 个答案:

答案 0 :(得分:5)

问题是,当您尝试更新Countries表中的主键值时,Country_Address表将包含一个返回Countries表的无效引用。

如果您想更新这样的密钥,最简单的方法是启用所谓的级联更新。您可以在创建外键时执行此操作。

见这里:http://msdn.microsoft.com/en-us/library/aa933119%28SQL.80%29.aspx


编辑:如果我最终理解正确,我认为Country_Address中的外键相反,或CountryID列上的外键至少不正确。请验证外键定义。

如果所有内容都设置正确,那么<{1}} 工作。您尝试更新时收到的错误消息 never 会导致UPDATE Country_Address SET CountryID = 2列中的值无效 - 这表示外键设置不正确。

答案 1 :(得分:1)

在SQL Server中,“工具”选项卡->“选项”->“设计器”->取消选择“禁止进行更改”选项。 然后可以直接编辑表格。 如果在添加行数据之后,出现错误“未更新行”。 然后选择“新建查询”,然后为特定表编写插入查询。而已 它对我有用,希望对您有帮助