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

go

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

`information_schema.routines` 是 MySQL 系统数据库 `information_schema` 中的一个表,用于存储数据库中所有存储过程和函数的信息。该表包含以下列: - `SPECIFIC_NAME`:存储过程或函数的唯一名称。 - `ROUTINE_CATALOG`:存储过程或函数所属的数据库名称。 - `ROUTINE_SCHEMA`:存储过程或函数所属的数据库名称。 - `ROUTINE_NAME`:存储过程或函数的名称。 - `ROUTINE_TYPE`:存储过程或函数的类型,取值为 "PROCEDURE" 或 "FUNCTION"。 - `DTD_IDENTIFIER`:存储过程或函数的返回类型,以及参数的类型和数量的描述。 - `ROUTINE_BODY`:存储过程或函数的实现体,取值为 "SQL" 或 "NATIVE"。 - `ROUTINE_DEFINITION`:存储过程或函数的定义体,即存储过程或函数的 SQL 语句。 - `EXTERNAL_NAME`:当存储过程或函数是外部函数时,存储外部函数的名称。 - `EXTERNAL_LANGUAGE`:当存储过程或函数是外部函数时,存储外部函数的编程语言。 使用 `information_schema.routines` 可以方便地查询数据库中所有存储过程和函数的信息,例如可以通过以下语句查询数据库中所有存储过程和函数的名称和类型: ```sql SELECT ROUTINE_NAME, ROUTINE_TYPE FROM information_schema.routines; ``` 该表还可以用于查询指定存储过程或函数的详细信息,例如可以通过以下语句查询指定存储过程的定义体: ```sql SELECT ROUTINE_DEFINITION FROM information_schema.routines WHERE ROUTINE_NAME = 'my_proc'; ``` 需要注意的是,只有当用户对存储过程或函数有访问权限时,才能查询到该存储过程或函数的信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值