【问题标题】:Determine Which Objects Reference a Table in SQL Server确定哪些对象引用 SQL Server 中的表
【发布时间】:2012-11-13 20:12:44
【问题描述】:

我使用 SQL Server 2008,我有一个包含 1500 多列和大约 500 个存储过程的数据库以及...。

我想重命名一个具有多个关系并在许多存储过程和视图中引用的表以及...。

如何获取数据库中与该表有关系的所有项目?

谢谢。

【问题讨论】:

    标签: sql-server-2008 table-rename


    【解决方案1】:

    如果你想要表、列、过程等数据库项目的引用。

    可以使用visual-expert工具,我们可以分析代码SqlServer代码

    更多信息:https://www.visual-expert.com/EN/visual-expert-documentation/code-cross-references/

    【讨论】:

      【解决方案2】:

      这是我找到的另一个解决方案。您不必安装任何工具。只需在查询分析器上运行即可。

      Use [Database]
      Go
      
      SELECT
      referencing_schema_name = SCHEMA_NAME(o.SCHEMA_ID),
      referencing_object_name = o.name,
      referencing_object_type_desc = o.type_desc,
      referenced_schema_name,
      referenced_object_name = referenced_entity_name,
      referenced_object_type_desc = o1.type_desc,
      referenced_server_name, referenced_database_name
      --,sed.* -- Uncomment for all the columns
      FROM
      sys.sql_expression_dependencies sed
      INNER JOIN
      sys.objects o ON sed.referencing_id = o.[object_id]
      LEFT OUTER JOIN
      sys.objects o1 ON sed.referenced_id = o1.[object_id]
      WHERE
      referenced_entity_name = 'SP_Pay_GetData'
      order by referencing_object_name
      

      【讨论】:

      【解决方案3】:

      使用sys.dm_sql_referencing_entities

      SELECT 
          referencing_schema_name, referencing_entity_name, referencing_id, 
          referencing_class_desc, is_caller_dependent
      FROM 
          sys.dm_sql_referencing_entities ('mySchemaName.myTableName', 'OBJECT');
      GO
      

      其中'mySchemaName.myTableName' 是您的schema.table,例如'dbo.MyTable'

      【讨论】:

      • 谢谢。但是“mySchemaName”和“OBJECT”是什么?
      • @Tavousi - 见msdn.microsoft.com/en-us/library/bb630351.aspx 如您所见,您想使用'OBJECT' 作为第二个参数。 SQL Server 中的默认架构是 dbo,所以这可能是您的架构。
      • 如果这意外地为您返回 0 行,请注意在 SQL Server 2008-2012 中,sys.dm_sql_referencing_entites 需要对被引用对象具有 CONTROL 权限才能工作。尝试以具有提升权限的数据库用户身份运行查询。
      • 这似乎不适用于查找在与执行 SP 的数据库不同的数据库中引用的对象
      • 我在一个古老的 SQL 2008 (10.0) 盒子上尝试了这个,搜索一个表,它返回了两个视图,但没有返回表上定义的四个触发器。它应该退回它们吗?
      【解决方案4】:

      如果您需要按名称查找数据库对象(例如表、列、触发器) - 请查看名为 SQL SearchFREE Red-Gate 工具 - 它会搜索您的整个任何类型字符串的数据库。

      对于任何 DBA 或数据库开发人员来说,它都是必备工具 - 我是否已经提到它绝对免费可用于任何用途??

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-17
        • 1970-01-01
        • 2023-03-30
        • 2023-03-12
        • 2012-05-01
        相关资源
        最近更新 更多