我在SQL Server 2008 R2中有三个表:Country
Address
和Country_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'。
声明已经终止。
答案 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中,“工具”选项卡->“选项”->“设计器”->取消选择“禁止进行更改”选项。 然后可以直接编辑表格。 如果在添加行数据之后,出现错误“未更新行”。 然后选择“新建查询”,然后为特定表编写插入查询。而已 它对我有用,希望对您有帮助