我需要在一个表中为一些行更新一个字段(比如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
。
目前,我所能做的就是使用错误消息中显示的表中的select *
语句从A-Z手动检查每个表。我想知道是否有任何替代方案可以直接更新表A(直到最后一个表格)中的这些特定字段?
我正在使用SQL Server 2005。
答案 0 :(得分:2)
这将为您提供外键中表和列的名称
SELECT
OBJECT_NAME(fk.[constraint_object_id]) AS [foreign_key_name]
,OBJECT_SCHEMA_NAME(fk.[parent_object_id]) AS [parent_schema_name]
,OBJECT_NAME(fk.[parent_object_id]) AS [parent_table_name]
,pc.[name] AS [parent_column_name]
,OBJECT_SCHEMA_NAME(fk.[parent_object_id]) AS [referenced_schema_name]
,OBJECT_NAME(fk.[referenced_object_id]) AS [referenced_table_name]
,rc.[name] AS [referenced_column_name]
FROM [sys].[foreign_key_columns] fk
INNER JOIN [sys].[columns] pc ON
pc.[object_id] = fk.[parent_object_id] AND
pc.[column_id] = fk.[parent_column_id]
INNER JOIN [sys].[columns] rc ON
rc.[object_id] = fk.[referenced_object_id] AND
rc.[column_id] = fk.[referenced_column_id]
如何最好地显示和分析连接图是一个更主观的问题,并将取决于您的架构的复杂性。