information_schema.routines与sysobjects

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

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

if exists (
 select * from sysobjects where type = 'p' and name = 'WorkOrdersForBlade')
 begin
  drop  procedure  dbo.workordersforblade
 end

goinformation_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

 

 

select * from INFORMATION_SCHEMA.PARAMETERS
select * from INFORMATION_SCHEMA.ROUTINES
select * from INFORMATION_SCHEMA.TABLES

 

posted @ 2010-09-21 09:49  Alex Tian  阅读(684)  评论(0编辑  收藏  举报