找出一个对象名称的所有出现处
来源:互联网 发布:如何看懂k线图 知乎 编辑:程序博客网 时间:2024/06/05 18:22
开发人员通常会发现他们以前为某个对象选择的名称会引起问题。坏消息是在大多数开发人员意识到他们所选择的对象名称有问题时,一般在数据库中已经有了几百个视图、存储过程和函数——而且这些对象名称已经出现了很多次。
在冒风险更改对象名称之前,你需要确定任务量。在感兴趣的对象是表或视图时,你可以使用 Enterprise Manager (企业管理器) 中内建的Dependencies (相关性)工具。要使用这一工具,运行企业管理器,展开数据库节点,扩展你所关心的子节点(表或视图),右键点击你所关心的对象,选择 All Tasks (所有任务),然后选择 Show Dependencies (显示相关性)。这样将得到两个列表:Objects That Depend On X (依附于 X 的对象) 和Objects That X Depends On (X 依附的对象)。该工具甚至还提供了一个复选框用于选择是只显示第一级的相关性,还是显示所有级的相关性。然而,事实上你不能用这些列表做任何事情。
要想得到一个更加有用的列表(例如,可以拷贝和粘贴),你可以在联接查询sysobjects和sysdepends表,如下所示:
[被屏蔽广告] |
SELECT sysobjects.name, *
FROM sysdepends
JOIN sysobjects ON sysdepends.id = sysobjects.id
ORDER BY sysobjects.name
如果有需要,还可以添加WHERE 谓词。你依然需要添加更多东西才能得到你要的结果,因为它所有能为你提供的是依赖对象的 ID,你必须转换这个 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
要测试这个过程,打开查询分析器,选择一个感兴趣的数据库,然后将上面的代码粘贴到一个窗口中。执行代码以创建存储过程,然后以如下方式调用存储过程:
Ap_Occurrences 'OrderID'
你将得到一个引用了OrderID或者你作为参数传入的值的用户函数、存储过程以及视图列表。
本文作者:Arthur Fuller 开发数据库应用程序已经有20余年的经验。他经常使用 Access ADP、Microsoft SQL Server 2000、MySQL 和 .NET。
- 找出一个对象名称的所有出现处
- 根据父级名称找出所有子集的SQL语句
- C# 找出一个子串在另一字符串中出现的所有位置
- 找出一个字符串的所有anagram
- 找出一个文件的所有硬链接
- 找出一个文件夹下的所有文件
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。
- 一组数据中只有一个数字出现一次 ;其他所有数字都是成对出现的请找出这个数字。
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。 请找出这个数字。
- 一组数据中只有一个数字出现了一次,其他所有数字都是成对出现的。 请找出这个数字。
- 找出一个整形数组的所有元素除了一个、两个、三个元素外,其余全是成对出现的,找出这些元素
- 一个一万字长的连续字符串,找出其所有子串,并统计子串的出现次数
- 一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字(数组指针的方法)
- 【c语言】给一组数,只有一个数只出现了一次,其他所有数都是成对出现的。找出这个数
- 【C语言】一组数据中只有一个数字出现了一次。 其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- C语言:一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。请找出这个数字。(使用位运算)
- 大家晚上好,小弟刚刚接触java。有些问题不是很理解,希望大家给予帮助。
- WindowsCE.Net下CAN卡的驱动程序设计
- 明智饮食:重识人生最重要的十个健康伴侣
- 层的使用:页面载入时提示消息层
- asp.net中容易犯的错误
- 找出一个对象名称的所有出现处
- 开发WinCE显示驱动(英)
- 如何用UltraEdit编译C#源程序
- WinCE下申请大容量物理内存
- WinCE定制中的大内存支持与永久保存注册表
- WinCE开发中Boot Loader的点点滴滴
- 多个复选框中选择2个后触发
- NET Compact Framework 游戏编程(英)
- 理解 Windows CE .NET 中的文件系统体系结构