【问题标题】:Where Used Statements in SQLSQL 中 Where 使用的语句
【发布时间】:2009-06-01 14:09:41
【问题描述】:

我的数据主要用于数据库的一个表中,并在几个不同的表中引用。我需要更正数据。是否可以编写一个“where-used”语句来搜索数据库中的每个表并返回所有引用数据的表?

我正在使用 SQL 2005。

谢谢。

【问题讨论】:

    标签: sql sql-server-2005


    【解决方案1】:

    我找到了这条sql语句here

    SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint,
    SCHEMA_NAME(schema_id) AS SchemaName,
    OBJECT_NAME(parent_object_id) AS TableName,
    type_desc AS ConstraintType
    FROM sys.objects
    WHERE type_desc LIKE '%CONSTRAINT'
    AND  OBJECT_NAME(OBJECT_ID) LIKE 'FK_%'
    

    注意:- 我将所有外键约束命名为以 FK_ 开头,以便过滤它们。

    【讨论】:

    • 是否处理传递引用,其中: TableA 定义主键列 A1; TableB 有一个引用 A1 的外键列 B1,但在 (B1, B2) 上有一个复合主键;并且 TableC 在列 (C1, C2) 上有一个复合外键。通常,您不会在 TableC 上使用 C1 引用 A1 的显式外键约束,但如果您绘制图表,您会看到 C1 列中的所有值也必须是 A1 列中的值。这不是一个常见的问题;它可能已被避免 - 但这是一个真正的问题。
    【解决方案2】:

    尝试将图表添加到数据库中,然后将所有表格放到其中。如果我正确解释了您的问题,您是在尝试理解已经存在的数据库模式吗?如果您使用图表,它将为您绘制参考资料,这将使您能够查看数据在表结构中的链接位置。

    对于 SQL,您可以使用连接,或者使用 where 条件来链接来自不同表的数据。

    你想“纠正”什么?

    【讨论】:

    • 我们在 defs 表中输入了两次描述符。我需要删除其中一个,但该 ID 已在多个不同的数据库中使用。我需要映射正确的 ID 并删除现有的重复项。
    【解决方案3】:

    在 Management Studio 中,您可以右键单击表/视图/存储过程并选择查看依赖项。在依赖项窗口中,您可以选择查看选定项所依赖的对象或查看依赖于选定项的项。

    【讨论】:

      【解决方案4】:

      事后您不能这样做,但在表设计时您可以设置与“ON UPDATE CASCADE”的关系。

      【讨论】:

        【解决方案5】:

        如果数据库中存在物理上的外键,您可以对数据库进行反向工程(请参阅this posting 了解执行此操作的脚本)。如果不是这种情况,那么您可以进行一些手动侦探工作。

        Visio 专业版有一个用于对数据库进行逆向工程的工具。 2003 不能很好地与 SQL Server 2005 配合使用,因此您需要:

        • Visio 2007

        • 修改上面链接的脚本,使其不会生成架构引用并将脚本加载到 SQL Server 2000 数据库中。然后,从 SQL 2000 数据库进行逆向工程。

        如果您没有外键或外键覆盖范围不完整,您可以手动查找它们(例如,查找具有相似外观代码的字段以引用数据)并手动注释图表中的键。不要尝试使用 SSMS 中的图表工具来执行此操作,因为它可能会尝试将 FK 填充回数据库中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-10
          • 1970-01-01
          • 1970-01-01
          • 2021-11-12
          • 2013-10-16
          • 2017-01-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多