【问题标题】:Find all foreign key of a table that prevent insert into it in SQL Server查找阻止在 SQL Server 中插入表的所有外键
【发布时间】:2015-12-29 17:48:03
【问题描述】:

我有一个包含大约 200 个表的数据库,其中包含许多外键约束。数据库中没有数据,我需要将行插入指定的表X

由于外键很多,我不知道如何在其他表中插入的顺序,以便我可以插入表X。一些外键约束是分层的。

怎样才能知道插入的顺序,以便成功地将数据插入到表X?有任何 SQL 查询可以帮助我吗?

已编辑 我希望生成一个包含“TableName”、“ParentTableDependece”列的表,该表显示树视图并可以从中进行选择

【问题讨论】:

  • 查看 SQL Server Management Studio 中“表 X 的”依赖关系,并查看“依赖于此的对象”。
  • 是的..你在句子中大写了每个世界,但不是问题的标题..:)
  • 右击表,然后点击查看依赖项
  • 非常好。我可以有一个查询来获取表名并给出所有依赖项吗?
  • 这听起来更像是一个命名/文档问题——如果依赖关系并不明显,那么您实际上要插入到其他表中的是什么?随机数据只是为了满足 FK 约束?

标签: sql-server sql-server-2008


【解决方案1】:

使用这个 sn-p,您可以找到所有其他表以及引用您自己的表 X 所涉及的外键:

;WITH ReferencingFK AS 
(
    SELECT 
        fk.Name AS 'FKName',
        OBJECT_NAME(fk.parent_object_id) 'ParentTable',
        cpa.name 'ParentColumnName',
        OBJECT_NAME(fk.referenced_object_id) 'ReferencedTable',
        cref.name 'ReferencedColumnName'
    FROM 
        sys.foreign_keys fk
    INNER JOIN 
        sys.foreign_key_columns fkc ON fkc.constraint_object_id = fk.object_id
    INNER JOIN 
        sys.columns cpa ON fkc.parent_object_id = cpa.object_id AND fkc.parent_column_id = cpa.column_id
    INNER JOIN 
        sys.columns cref ON fkc.referenced_object_id = cref.object_id AND fkc.referenced_column_id = cref.column_id
)
SELECT 
    FKName,
    ParentTable,
    ParentColumnName,
    ReferencedTable,
    ReferencedColumnName
FROM 
    ReferencingFK
WHERE
    ReferencedTable = 'X'   --  <=== put your table name here!
ORDER BY 
    ParentTable, ReferencedTable, FKName

一旦您拥有所有引用 X 的表,您可能还需要对其他表重复此操作(如果它们又依赖于外键引用)

【讨论】:

  • 我运行了这个查询但是没有返回结果
【解决方案2】:

为什么不这样?

EXEC sp_msdependencies @objname = 'X'

拉吉

【讨论】:

  • 你是什么意思?输出中的 oSequence 列应该告诉您关系的级别。
  • 我希望生成一个 table,其中包含“TableName”、“ParentTableDependece”列,显示树形视图并可以从中进行选择
【解决方案3】:

你可以试试:

EXEC sp_help 'TableName'

这将为您提供表格的全部详细信息,即您可以获得与您传递的对象相关的关系、索引和其他信息。

【讨论】:

  • 嗨,Iswanto San,您能具体说明一下您在上述答案中编辑的内容吗?
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
相关资源
最近更新 更多