发新话题
打印

[方法技巧] 实现和使用数据据库---存储过程

实现和使用数据据库---存储过程

存储过程(stored prcedure)是SQL SERVER 的主要特征之一,几乎所有在SQL基础上开发的应用程序都在某种程度上使用了存储过程。事实上,SOL中的许多管理性的任务都是由存储过程完成的。
5 D# ]! R0 H: ]存储过程是分析和编译后的SQL程序,它驻留在数据库中,可以被客户应用程序通过引用其名称而调用,并允许数据以参数形式在过程和应用程序间来回传递。在SQL中,存储过程分为两类:系统提供的存储过程和用户自定义存储过程。
  t  L: V$ [) }5 L% F; V% i系统过程主要存储master数据库中并以sp_为前缀,它主要是从系统表中获取信息,从而为系统管理员提供支持。虽然这些系统存储过程被放在mastet数据库中,但是仍可以在其他数据库中对其进行调用,在调用时不必在存储过程名前加上数据库名。当创建一个新的数据库时,一些系统存储过程会在新数据库中被自动创建。
5 m6 C! C3 E1 j7 S  E  I用户自定义存储过程是由用户创建并能完成某些特定功能的存储过程。下面主要讲述用户自定义存储过程的创建和使用。  ^& v& S  s- O8 d* y6 ]8 {7 O0 G: O0 a
1、存储过程的优点, n+ i. d, @/ K/ {- w& o8 y  Q
减少网络传输量0 @8 I$ c% I7 F8 A) [) W
 ( }, |6 h) `. Q5 a6 l0 `9 `
更快地执行速度,改善子性能
. _  D0 z# Q+ ?  i% Q$ F! _模块化程序设计,具有可移性
6 E* ]6 b, ^4 _8 p) A  0 U+ [2 R# I" J& p% k- Z
强化商务规则,增强安全机制; v; y3 J; a/ X$ p
2、用CKEATE PROCEDURE语句创建存储过程
: e0 A; H3 V! i" g& q  在SQL中有两种方法可以创建存储过程,一种是使用CREATE PROCEDURE语句,别一种是使用Enterprise Manager来创建。/ ~8 d9 S: F1 `* t! \3 |2 T3 \
  用CREATE PROCEDURE语句来创建存储过程的基本语法如下:. j" d( j3 k4 J" {' I
    CREATE PROC[EDURE] procedure_name[;number]; \# p- B( W8 F0 i
   [{@parameter data_type} [=default][OUTPUT]]
6 D; m) U2 Q9 _8 `2 r/ }   [,...n]3 A7 d  L3 z1 {& x! i8 F! `
   [FOR REPLICATION] | [WITH {RECOMPILE,ENCRYPTION]7 Y1 M: Q2 ?" E6 D7 g
   AS sql_statement[,...n]( e8 E' C+ s9 }+ S. p1 }
各参数说明如下。
$ [% R. q& r# z9 [  preocedure_name:指定要创建存储过程的名字,它后面的可选参数number是一个整体数,用来区别另一组同名的存储过程。存储过程的名字在一个数据库中或者对其所有而言,必须惟一,因此在命名时,最好在名字前面加上前缀,如sp_或xp_等。
: [; o& L1 P( q" B: X- i, j  @parameter:存储过程的参数。在一个CREATE PRECEDURE语句中,可以声明一个或多个参数。当调用该存储过程时,用户必须给出所有的参数值,除非定义了参数的默认值。当参数以@parameter=value的形式出现,则参数的顺序可以不同,否则用户给出的参数必须与参数列表中的顺序保持一致。一个存储过程至多有1024个参数。( }% Z% w- @9 s7 W
  data_type:是参数的数据类型。在存储过程中所有的数据类型都可以用作参数。
+ u/ ^+ E7 [* Z: M* l1 y  default:参数的默认值。如果定义了默认值,那么即使不给出参数值,该存储过程仍能被调用。默认值必须是常数或NULL值。
' U8 W- S# G. y* f" l+ P8 a; u  OUTPUT:表明该参数是一个返回参数。用OUTPUT参数可以向调用者返回信息。text类型的参数不能用作OUTPUT参数。
+ B4 [+ w0 A% H8 m, h  FOR REPLICATION:指明了为复制创建的存储过程不能在订购服务器上执行,只有在创建过滤存储过程时,才使用该选项。FOR REPLICATION与WITHRECOMPILE选项是互不兼容的。
. u$ g+ g+ h. l" r. B( s8 n- V2 ]; h  RECOMPILE:指明SQL加密了syscomments表,该表的text字段是包含有CREATE PROCEDURE语句的存储过程文本,选择了此项,则无法通过查看syscommets表来查看存储过程。, Q6 S. `& e: S
  AS:指明该存储过程要执行的动作。4 w3 D. {: E* P8 S+ [4 ]
  Sql_statement:指任何包含在存储过程中的SQL语句,但是CREATE语句除外。2 f5 x$ ]* a( r( J6 R6 W
注意:一个存储过程的最大尺寸为128M。用户定义的存储过程必须创建在当前数据中。
3 i% ^9 B; n0 B- C& J& s使用EXECUTE命令可以执行己经创建的存储过程。其语法如下:' a) k; O% W- c  j' M
〔EXECUTE] [@return_status=]& `  A; i0 X* o2 G9 A* W
{procedure_name[;number] | @procedure_name_var}( R% Q8 b5 }# Z# t8 }% u
[{@parameter=]{value | @variable [OUTPUT] | [DEFAULT][,...N]}]
5 M: f% f" _  b/ y+ A[WITH RECOMPILE]
+ n0 }1 N( `2 e. s# }0 i各参数说明如是。5 d7 @# P$ q7 g& j
@reture_status:可选的整型变量,用来存储存储过程向调用者返回的值.) {3 j$ f2 j; P" V
@procedure_name_var:变量名,用来代表存储过程的名字。
发新话题