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