找到对象名出现的所有地方

ZDNet软件频道 时间:2003-12-03 作者:ZDNet China |  我要评论(9)
本文关键词:对象 db
开发人员选择了一个后来意识到带来问题的对象是很常见的。但是往往当发现时已经发现者的错误的对象名已经在开发过程中多次出现了。本文让我们来看看该如何处理这种情况。
本文译自Builder.com,未经许可请勿转载

开发人员选择了一个后来意识到带来问题的对象是很常见的。坏消息是,当大多数开发人员意识到他们所选择的名称有问题的时候,通常在数据库里已经有了几百个查看表、存储过程和函数——而这个对象名在它们中间多次出现过。

在你能够冒风险更改名称之前,你需要确定任务的工作量。当对象是一个表格或者查看表的时候,你可以使用内置在企业管理器里(Enterprise Manager)的依赖性(Dependencies)这个工具。要使用它就要运行企业管理器,扩展数据库节点,再展开子节点(表格或者查看表),右击对象,选择所有任务(All Tasks),然后选择显示依赖性(Show Dependencies)。你得到了两个列表:依赖X的对象(Objects That Depend On X)和X所依赖的对象(Objects That X Depends On)。这个工具甚至提供了一个复选框,用于在第一层的依赖性和所有层的之间切换。但是光有列表你还是做不了任何事情。

要获得更有用的列表(例如你可以用来复制和粘贴的),你可以在一个查询里把sysobjects和sysdepends表格合并在一起,就像下面这样:

SELECT sysobjects.name, *
FROM sysdepends
JOIN sysobjects ON sysdepends.id = sysobjects.id
ORDER BY sysobjects.name

也你可以加入一个WHERE述词,如果你希望的话。你还有一些工作要做,因为它给你的所有东西就是依赖对象的ID,这是你要解决的。

当所关心的对象不是一个表格或者查看表而是一个列名称的时候,问题就出现了。企业管理器没有向你提供方便的方式,用以确定所有的存储过程、查看表和依赖指定列名称的用户函数。

用于这些对象的文本都被保存在表格syscomments里一个叫做Text的列里。这个表格以对象ID命名,所以你只有在把它和sysobjects表格合并到一起的时候才能够使用它。

下面的存储过程进行了这个合并过程,并接受一个将是关注对象的单个参数。你也可以传递表格或者查看表的名称。它会正确地执行,但是我编写它来处理列名称。

CREATE PROCEDURE ap_Occurrences

    (
        @Target varchar(100)
    )

AS

    /* SET NOCOUNT ON */
    SELECT
        sysobjects.Name,
        syscomments.Text,
        CASE
        WHEN xtype = 'P' then 'Stored Procedure'
        WHEN xtype = 'V' then 'View'
        WHEN xtype = 'IF' then 'Function'
        ELSE xtype
        END
        AS 'Object Type'
    FROM
        syscomments JOIN sysobjects ON syscomments.id = sysobjects.id
    WHERE
        CHARINDEX(@Target, Text) > 0
    ORDER BY [Object Type], Name
    RETURN

要试验这个过程,就要打开查询分析器(Query Analyzer),选择数据库,然后上面的代码粘贴到一个窗口里。执行它并创建存储过程,然后调用这个过程,就像下面一样:

Ap_Occurrences 'OrderID'

你将获得一个用户函数、存储过程和查看表的列表,它会参照OrderID或者你作为参数传递的任何值。


Arthur Fuller开发数据库应用程序已经有20年了。他的专业经验包括Access ADPs、微软SQL 2000、MySQL和.NET。




责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134