【发布时间】:2014-07-30 05:18:40
【问题描述】:
我需要为一张表中的几行更新一个字段(例如,Table_A)。但是,我收到一条错误消息,上面写着conflict with the Foreign Key Constraint in Table_B。
所以,我也尝试更新 Table_B,结果 Table_B 有 Foreign Key Constraint 和 Table_C 和 Table_D;再次,我尝试更新 Table_C 和 D,结果发现它们与 table_E、F、G、H、I、J、K 等冲突。等等。
有人告诉我,这样的“连锁店”最多可以容纳 20 多张桌子。
此外,我无权访问数据库架构,因此我很难确定哪个表中的哪个field 是另一个表的foreign key。
目前,我所能做的就是手动检查每个表,从 A-Z 一直使用错误消息中显示的表中的select * 语句。我想知道是否有任何替代方法可以直接更新所有表 A 中的这些特定字段(以最后一个表为准)?
我使用的是 SQL Server 2005。
【问题讨论】:
-
为什么看不到表架构?你能查询外键DMV吗?从 sys.foreign_key_columns 中选择 *
-
它给了我
constraint object id、constraint column id、parent object id、parent column id等等,只是一堆数字。我如何从中确定? -
你必须从 parent_object_id 开始。这将是您开始使用的表的 ObjectID。那么referenced_object_id就是带有外键的表的object_id。可以通过查看 sys.columns 来确定父级和引用的 column_id。放在一起查找与给定表相关的所有外键约束并不是一个简单的查询。这是(或至少可以)递归的。这就是为什么如果您查看数据库的架构会容易得多。
-
这是该 DMV 的 BOL 条目。 msdn.microsoft.com/en-us/library/ms186306.aspx
标签: sql sql-server