密级:秘密-MM
发行:
项目名:技术部--ALL
配置项类型:PS
配置项编号:012
版本号:2001-06
状态:1
分册名称:第1册/共1册
SQL SERVER存储过程
编写规范
福建中科讯信息技术有限公司
发行对象:
发行通知单NO. 1.0
文件认可
评审者:日期:/ /
(部门经理)
认可者:日期:/ /
(客户代表)
分发清单:
拷贝编码发行日期发布给
1 1.0 部门经理
2 1.0 客户代表
3 1.0 文件档- 公司联机拷贝
文件更改摘要:
更改的部分只有在完全替换其所在的章节并在上面附上由部门经理签名的发行通知单才能被发布。
修订记录
日期修订说明修订人
1创建存储过程的语法
use
go
if exist …
drop PROCEDURE
go
set
set
CREATE PROCEDURE
[[(]@parameter_name datatype [OUTPUT]
[,@parameter_name datatype [OUTPUT]]..[]]
AS
Begin
SQL_statements
End
Go
Set
Set
2存储过程命名约定
存储过程的命名必须符合P_调用分类_功能分类_详细名称格式,其中 P表示是存储过程,详细名称是与存储过程意义相关联的汉语拼音首字母。
按功能分类:
查询类:CX
数据维护类:WH
业务处理类:YW
例: P_YW_GFQS
3变量名
参数命名约定:@a+变量类型+’_’+名称,变量类型用小写, 名称用大写。
变量类型前缀
Integer @ai_
Smallinteger @asi_
Tinyint @ati_
Varchar @avc_
Char @ac_
Numeric @an_
Datetime @adt
Smalldatetime @asdt
内部变量命名约定:@+变量类型+’_’+名称,变量类型用小写, 名称用大写。
变量类型前缀
Integer @i_
Smallinteger @si_
Tinyint @ti_
Varchar @vc_
Char @c_
Numeric @n_
Datetime @dt
Smalldatetime @sdt
4使用光标
●命名方式:Cur_+名称,名称用小写,第一个字母大写。
●用全局变量@@fetch_status来判断光标执行是否成功。
●@@fetch_status返回值:0为成功,1表示失败,2表示未取到数据。5返回值约定
●’0’ 为成功,’<0’ 为失败,’1’----‘99’为其它类型返回值。
●用RETURN返回值,例如: RETURN 0
建议:编写通用错误处理过程(见10章)。
6备注
过程前有文字说明,说明本过程是做什么的;调用者是谁;返回值的含义;参数的含义;输入数据库;输出数据库;每一步操作前有文字说明,说明该操作达到的目的。
格式为:
/*
概要说明:
中文名称:
用途:
数据库:
语法信息:
输入参数:
输出参数:
调用举例:
外部联系:
上级调用:
下级调用:
输入表:
输出表:
功能修订:
简要说明:
修订记录:
2001/09/30 张静创建
*/
7每一个存储过程均需按模板填写详细的设计文档
见附件。
8语句格式
●对函数和关键词用小写,其它场合用大写。
●对SQL语句特别是INERT、DELETE、UPDA TE语句成功与否的判断,用全局变
量@@error和@@rowcount来判断。
@@error返回值:0为成功。
@@rowcount返回值:0为没有记录被改动。由于@@rowcount的值受每个执行命令的影响,因此应在SQL语句后立即判断@@rowcount的值,或声名一个
局部变量来保存@@rowcount的值。
●SELECT、INSERT语句选择出多字段时,不要一个字段占一行,而采用以下形式
SELECT @c_dev_no = Dev_no, @n_pay_no = Pay_no, @c_usr_name = Usr_name
FROM Tel_bas_infot
WHERE Usr_no = @c_usr_no
●采用规范的缩进文本格式书写
一般设置:TAB = 4,并将TAB自动转换为空格;
若有多个Begin…End语句嵌套时采用如下方式
BEGIN /*1*/
…
BEGIN /*1.1*/
…
BEGIN /*1.1.1*/
…
END /*1.1.1*/
BEGIN /*1.1.2*/
…
END /*1.1.2*/
END /*1.1*/
END /*1*/
其中1表示第一级嵌套,1.1表示第二级嵌套,1.1.1表示第三级嵌套,1.1.2表示第三级的第二个嵌套…,一般不要超过三级嵌套。
9使用存储过程的注意事项
●当存储过程的某一部分出错时,均用ROLLBACK TRANSACTION 对整个事务(如
果采用事务处理的话)进行回退。(只能运行一次过程的要采用事务)
●存储过程中的注释
单行要用--
大段注释用/* 注释内容*/ 的形式。
●一个存储过程可以调用其他存储过程,这种嵌套调用的层数限于16,当前嵌套层
数的值保存在全局变量@@nestlevel中。
●可以在自己的SQL Server上执行另一个SQL Server上的存储过程,这时另一个SQL
Server 的名字应作为过程名的前缀。
但是远程过程的调用并非看作事务的一部分。所以当在一个事务进行远程的调用后,远程过程在远程服务器上的修改不能滚回。
●当创建过程和执行过程的语句均包括带参数名的OUTPUT选择时,过程将给调用
者返回一个值。
●CREATE PROCEDURE 语句本身可包含在任意数目和类型的SQL语句,但USE
和下面的CREATE 语句除外
CREATE VIEW ,CREATE DEFAULT ,CREATE RULE ,
CREATE TRIGGER ,CREATE PROCEDURE
●如果执行一个调用其它过程的过程,被调用的过程可以存取第一个过程所生成的目
标,如临时表。
●如果在过程内生成临时表(#),该临时表仅为该过程而存在;退出该过程时,该临
时表自动消失。为规范起见,要求退出前将其drop。
●可以用sp_rename objname,newname将存储过程改名。
对其它被过程引用的对象的更名在重编译后会出问题,必须引起注意。可用sp_help,sp_helptext及sp_depends查看关于某过程的情况。建议不要用
sp_rename,而采用先drop 后create 的方法。
10错误处理
内部错误处理应采用通用错误处理过程,所有错误信息统一编号备查,便于维护
错误代码错误说明备注