SQLServer 2005中如何列所有存储过程

作者:佚名 来源:xuejinyoulan 时间:2008-11-24 17:39:00 

对于数据库管理员来说,可以经常想了解一些之前未听说过的存储过程,特别是无文档类型的存储过程。或许是用这些存储过程,能够简化日常的数据管理。

为了查找这些存储过程,你可以花时间在互联网搜索,查看一些你还未知道的存储过程,也许在一两个小时您可能会发现你想要...也许你很幸运的找到,其他人在他们的文章中列出所有的存储过程 ,函数和视图,并介绍了如何使用这些存储过程。

但其实,您可以在一分钟之内就可以自己列出这些存储过程、函数和视图的清单!这份名单甚至包括SQL Server中所有无文档的存储过程。通过这个清单,你就可以确定你所想要找的存储过程。

SQL Server 2005实际上保存了所有存储过程的列表,包括有文档的、无文档的,甚至是用户自定义的!所有这些信息,都包含在系统表中。最简单的方法是使用一个系统视图,特别是sys.all_objects这个视图来查阅。

您也可以使用sys.procedures目录视图,但我的测试结果,发现这个视图会过滤掉一些储存过程。

您也可以使用系统储存过程sp_stored_procedures返回当前环境中的存储过程列表 ,但这个存储过程同样也限制了存储过程返回值。

通过对比,我觉得:如果想获得SQL Server 2005中所有的储存程序,建议使用sys.all_objects这个系统视图,sys.Procedures或sp_Stored_Procedures这两个视图会因为某些未知原因,过滤掉一些内容,造成信息不全。

存储过程信息是存储在各自用户数据库中的系统表中的。SQL Server 2005保存了存储过程的唯一标识信息,如存储过程的名称、创建时间、修改时间、是否来自微软等等。

如何确保所有的用户数据库都能够自动创建这些存储过程呢?

当SQL Server部署完成后,微软提供的存储过程,是保存在master数据库中的。当您新建一个数据库时,master数据库将作为模板数据库,因此,master数据库中的所有存储过程将自动创建到你所新建的数据库中。

如果你想创建一个存储过程,并希望能够自动分发到所有的数据库中,你可以在master数据库中建立该存储过程,这样之后新创建的数据库中,将自动包含你新建的这个存储过程; 但对于之前已经存在的数据库,你仍需要到每个数据库中手动创建这个存储过程。

一、列出所有的储存过程

以下代码列出了SQL Server 2005中存在的所有储存过程。

#cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">

<以下为引用的内容:
  USE [your_database_name_here];
  GO
  SELECT * FROM sys.all_objects
  WHERE ([type] = 'P' OR [type] = 'X' OR [type] = 'PC')
  ORDER BY [name];
  GO

如果您已经安装了SQL Server 2005,并使用了所有的默认设置时,你将看到类似一下界面:


上面这个命令,通过Type对象进行过滤。从下表中,你可以确定自己所需的对象的类型,然后根据你的实际情况,调整WHERE子句中的类型。

此列表仅列出了意见,职能和程序。

二、用户自定义存储过程

在日常使用中,另一个字段&ldquo;is_ms_shipped&rdquo;也经常用来筛选记录。该字段用来判断存储过程是有微软发布的 ,如果最初是由微软发布的,则该字段的值为0; 如果不是由微软发布的,则该字段的值为1 。

在上面的T-SQL语句的基础上,您只要增加个限制条件&ldquo;and [ is_ms_shipped ] = 0 &rdquo;,就可以找到不是微软创建的存储过程,这些或许是你或者第三方软件商访问数据库时创建的。如果您只想看看微软提供的储存过程,只要将值从0到1即可 。

下面举例说明,通过一个T-SQL代码演示如何获取只有用户定义的存储过程。


           

  USE [your_database_name_here];
  GO
  SELECT * FROM sys.all_objects
  WHERE ([type] = 'P' OR [type] = 'X' OR [type] = 'PC')
  AND [is_ms_shipped] = 0
  ORDER BY [name];
  GO

需要注意的是,这个语句的执行结果,因每个人的数据库的情况不同,而得到不同的记录列表。情况而异。执行之后,将看到类似下图的输出结果。

三、小结

通过上面的例子可以看到,通过少量代码,我们就可以很容易地、快速地获得自己所用的SQL Server 的存储过程列表,你不必在一个个网站中搜索这些存储过程了。你可能会学到一个之前自己花了很大精力编写的复杂脚本,现在直接用一个存储过程就可以实现同样的效果了。

请记住,当使用一个不能确定来源或结果的存储过程,应该在测试系统先验证; 从来没有使用任何没有得到彻底的测试在生产环境中。

本文只是告诉各位可以用来获得SQL Server 2005中所有存储过程的方法,但不是鼓励你随意使用任何类型的存储过程,特别是无文档类型的。Microsoft一再声明:微软对所有无文档的存储过程,扩展存储过程,函数和视图,均不提供任何相关的支持。

标签:
0
投稿

猜你喜欢

  • MySQL和MongoDB设计实例对比

    2011-06-19 15:41:01
  • IE下的firebug方法

    2009-07-29 18:50:00
  • CSS解决未知高度的垂直水平居中自适应问题

    2009-03-17 17:06:00
  • 如何使用 SQL Server 数据库查询累计值

    2008-12-03 15:27:00
  • CSS Position

    2009-05-17 14:27:00
  • 在MySQL中获得更好的全文搜索结果

    2008-05-09 10:38:00
  • 基于RSA算法在asp中加密与解密对应的函数

    2007-11-07 21:39:00
  • asp详解session的用法

    2007-09-07 10:22:00
  • SQL 判断给定日期值(或时间段)所在星期的星期一和星期天的日期

    2011-10-24 20:14:52
  • sqlserver中去除字符串中连续的分隔符的sql语句

    2012-06-06 20:07:39
  • 如何取得所有的Session变量

    2008-06-08 13:59:00
  • js读取图片的宽和高

    2007-08-04 10:14:00
  • ASP把数字用逗号每3位隔开显示代码

    2008-01-02 13:11:00
  • js金额浮点格式化控件

    2008-08-01 16:52:00
  • ASP中如何判断字符串中是否包含字母和数字

    2009-07-10 13:12:00
  • oracle的一些tips技巧

    2009-03-02 11:06:00
  • IE6实现min-width

    2008-06-12 12:40:00
  • css中absolute与relative的区别

    2007-11-17 08:04:00
  • asp如何用SA-FileUp上传多个文件?

    2010-06-13 14:34:00
  • JavaScript的事件代理比你想的要简单

    2009-04-27 12:40:00
  • asp之家 网络编程 m.aspxhome.com