information_schema.routines与sysobjects

来源:互联网 发布:淘宝进货货源 编辑:程序博客网 时间:2024/05/30 23:00

在建立存储过程前,我习惯于先检查存储过程是否存在,如果存在就建立,然后再创建。

这个检查的过程,现在有2种习惯写法,如下:if exists (select * from information_schema.routines where specific_name = 'WorkOrdersForBlade' and specific_schema = 'dbo')begindrop procedure dbo.workordersforbladeendgo

或者

if exists (select * from sysobjects where type = 'p' and name = 'WorkOrdersForBlade')begindrop  procedure  dbo.workordersforbladeendgo

information_schema.routines 是SQL Server 2000开始新加的系统视图,它是以 sysobjects 和 syscolumns 系统表为基础建立的系统视图。它的字段更具备可读性。

用上面那个写法都没有问题。 在SQL Server 2005 以及 2008 的默认模板中,使用的是第一种写法。

显然,我们最好用经过整合后,更具备可读性的视图 information_schema.routines 。

参考资料:

SQL Server 2008 联机丛书 对routines 视图的介绍
http://msdn.microsoft.com/zh-cn/library/ms188757.aspx
http://msdn.microsoft.com/en-us/library/ms188757.aspx

数据库中User和Schema的关系
http://blog.csdn.net/yanjiangbo/archive/2007/09/12/1782576.aspx

ROUTINES
http://www.yesky.com/imagesnew/software/tsql/ts_ia-iz_3kq1.htm

原创粉丝点击