计算机等级考试三级数据库模拟题SQLServer7.0入门(五)
来源:优易学  2011-10-6 22:56:24   【优易学:中国教育考试门户网】   资料下载   IT书店
  使用 SQL Server 开发应用程序编写存储过程与触发器
  存储过程和触发器是由用户创建的、驻留在服务器的一组 Transact SQL 查询语句。触发器是系统在特定条件下执行的。存储过程能够改善应用程序的性能。当客户程序需要访问数据时,一般要经过 5 个步骤才能访问到数据:
  1 ) 查询语句被发送到服务器。
  2 ) 服务器编译 SQL 代码。
  3 ) 优化产生查询的执行计划。
  4 ) 数据引擎执行查询。
  5 ) 结果发回客户程序。存储过程是在创建时编译的,当存储过程第一次执行时, SQL Server 产生查询执行计划并将其存储进来,以利于将来使用。当通过存储过程发出一个请求时,上述的第 2 和第 3 步就没有了,这能大大改善系统的性能。即使在第 1 步上也能提高性能。因为此时发送到服务器的语句只是一条存储过程的 EXECUTE 语句,而不是庞大的、复杂的查询。这种特性能降低网络的流量。除了性能方面的改善外,存储过程还提供了方便地集中维护应用程序的功能。如果将查询嵌入到应用程序中。而又需要对查询进行改变,则应用程序需要重新编译,并重新发布到所有的客户端。而在存储过程中,修改对用户而言是透明的,它只需要在服务器上重新编译存储过程。存储过程还能提供安全机制,尽管用户可能无权执行存储过程中的命令,但它却可能有权执行存储过程本身。有时候,系统管理员不会给用户以数据修改( UPDATE 、 INSERT 和 DELETE )的权力。创建的存储过程却能进行这些操作。当然用户需要拥有执行该存储过程的权力。
  建立存储过程
  存储过程可以达到以下目的:
  · 带参数。
  · 返回状态值。
  · 调用其它存储过程。
  · 在远程服务器上执行。
  存储过程在“ sysobjects ”系统表中有一个表项,其类型为“ P ”。存储过程的文本存储在“ syscomments ”系统表中。创建存储过程需要使用 Transact SQL 命令 CREATE PROCEDURE 。
  例如:
  USE pubs
  GO
  CREATE PROCEDURE
  ap_GetAuthorsForPublisher
  AS
  SELECT a.au_lname,a.au_fname
  FROM authors a, titleauthor ta, titles t, publishers pW
  HERE a.au_id = ta.Au_id
  AND ta.Title_id = t.title_id
  AND t.pub_id = p.pub_id
  AND p.pub_name = ’ New Moon Books ’
  GO
  CREATE PROCEDURE 语句的语法如下:
  CREATE PROC[DURE] procedure_name
  [;number]
  [@parameter_name ][OUTPUT] [,_n] ]
  [WITH {RECOMPILE | ENCRYPTION}]
  [FOR REPLICATION]
  AS
  Number 是用来对相同名字的过程进行分组的整数。分组是将所有的过程通过 drop procedure 语句组合到一个分组中。
  @parameter_name 指定参数的名称。
  RECOMPILE 表示每次执行过程时都要进行编译。
  ENCRYPTION 表示过程的文本在“ syscomments ”表中要加密。
  FOR REPLICATION 表示过程不能在提交服务器上执行。将参数传递给存储过程,存储过程能够接受参数。
  注意:过程的参数也可以是用户定义的数据类型。给参数一个缺省值用户还可以为存储过程中的参数定义缺省值。当在执行时没有提供所需的参数时,系统就使用缺省值作为参数。如果既没有定义缺省值,又没有在执行时提供参数,则 SQLServer 就会返回一个错误。在存储过程中定义缺省值,并使用一些逻辑检测是否指定了参数从而采取相应的行动,这是一种很好的习惯。例如:USE pubsGO
  CREATE PROCEDURE
  ap_GetAuthorsForPublisher
  @PublisherName varchar(40) = ‘ New Moon Books’
  AS
  SELECT a.au_lname,a.au_fname
  FROM authors a,titleauthor ta, titles t, publishers p
  WHERE a.au_id = ta.Au_id
  AND ta.Title_id = t.title_id
  AND t.pub_id = p.pub_id
  ANDp.pub_name = @PublisherName
  GO

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训