【问题标题】:Identify column-level dependencies between databases识别数据库之间的列级依赖关系
【发布时间】:2010-08-18 03:29:10
【问题描述】:

有没有办法识别数据库内部和数据库之间的列级依赖关系?我想生成数据库中所有未被任何东西(视图、过程、UDF)使用的列的报告。

例如

在数据库“DB1”中,有一个表,其中包含一个名为“col1”的列。如何确定数据库“DB1”或第二个数据库“DB2”中的 proc、视图或 UDF 是否正在使用“col1”?

谢谢

【问题讨论】:

  • 这个问题的答案可能因平台而异。请确定您感兴趣的 SQL 版本/版本。
  • 部分问题是一个列可能在 DB1 和 DB2 中未使用,但被您不知道的其他下游进程使用,删除它可能会破坏这一点。重命名列,看看是否有人尖叫更安全。

标签: sql sql-server sql-server-2005 dependencies


【解决方案1】:

您可以尝试使用:

SELECT OBJECT_NAME(m.object_id), m.*
  FROM SYS.SQL_MODULES m
 WHERE m.definition LIKE N'%my_column_name%'

SYSCOMMENTSINFORMATION_SCHEMA.routines 具有 nvarchar(4000) 列。因此,如果在位置 3998 处使用“my_column_name”,则不会找到它。 SYSCOMMENTS 确实有多行,但 ROUTINES 会截断。

但这对于SELECT * 的情况没有任何帮助,因为列名不会是文本。

【讨论】:

    【解决方案2】:

    如果只有 col1、db1 和 db2,您可以将 db1 和 db2 中的对象编写脚本并搜索对 col1 的引用。

    【讨论】:

    • 只有两个数据库要搜索,但是要查的列很多。原始数据库从外部系统导入,该导入不区分系统所需的实际列;它只是把它们都带进来了,所以有很多是不必要的。
    猜你喜欢
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2011-12-19
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多