存储过程与函数

来源:互联网 发布:linux开机进入grub 编辑:程序博客网 时间:2024/05/20 06:50

       最近在做人事档案管理系统,不管是在程序中还是在SQL Server 中,时常都会用的函数。数据中的函数从刚开


始学习数据库时就已经开始使用了,但是刚开始的时候对存储过程并不了解,只是知道有这么一个内容。现在就来说


说关于存储过程与函数的异同,首先我们需要来了解一下关于存储过程与函数的定义。



一.定义


1.存储过程


       存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句


和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通


过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程在创建时即在服务器上进


行编译,所以执行起来比单个 SQL 语句快。


例如:


Create  PROCEDURE  [dbo].[PROC_CR_Insert_OnComputerRecord]@StudentCardID char(11),  --卡号@Ondate date ,       --上机日期@Ontime char(10) ,       --上机时间@ComoputerNo char(20)    --机房号Asbegin set NOCOUNT ON;set XACT_ABORT ON;begin  tran  --开始事务select StudentID,StudentName,StudentSex,Studenttype,Department ,Cash from StudentBasicInfo where StudentCardID =@StudentCardID ;insert into OnOffComputer  (StudentCardID ,Ondate ,Ontime,ComputerNo)values (@StudentCardID ,@Ondate ,@Ontime ,@ComoputerNo )COmmit tran --提交事务end  exec PROC_CR_Insert_OnComputerRecord '1','20130821','8:00','11'   --执行语句--

结果为:




以上的存储过程的作用是插入上机信息.


2.函数


       函数是由一个或多个 Transact-SQL 语句组成的子程序,可用于封装代码以便重新使用。Microsoft SQL Server? 


2000 并不将用户限制在定义为 Transact-SQL 语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。


可使用 CREATE FUNCTION 语句创建、使用 ALTER FUNCTION 语句修改、以及使用 DROP FUNCTION 语句除去


用户定义函数。每个完全合法的用户定义函数名 (database_name.owner_name.function_name) 必须唯一。


       必须被授予 CREATE FUNCTION 权限才能创建、修改或除去用户定义函数。不是所有者的用户在 Transact-


SQL 语句中使用某个函数之前,必须先给此用户授予该函数的适当权限。若要创建或更改在 CHECK 约束、


DEFAULT 子句或计算列定义中引用用户定义函数的表,还必须具有函数的 REFERENCES 权限。


例如:


-- ============================================= -- Author: 唐欢 -- Create date: 2013-8-16 -- Description: 提供中文首字母 -- ============================================= create FUNCTION [dbo].[fun_getPY] ( @str NVARCHAR(4000) ) RETURNS NVARCHAR(4000) AS BEGIN DECLARE @word NCHAR(1),@PY NVARCHAR(4000) SET @PY='' WHILE len(@str)>0 BEGIN SET @word=left(@str,1) SET @PY=@PY+(CASE WHEN unicode(@word) BETWEEN 19968 AND 19968+20901 THEN (SELECT TOP 1 PY FROM ( SELECT 'A' AS PY,N'驁' AS word UNION ALL SELECT 'B',N'簿' UNION ALL SELECT 'C',N'錯' UNION ALL SELECT 'D',N'鵽' UNION ALL SELECT 'E',N'樲' UNION ALL SELECT 'F',N'鰒' UNION ALL SELECT 'G',N'腂' UNION ALL SELECT 'H',N'夻' UNION ALL SELECT 'J',N'攈' UNION ALL SELECT 'K',N'穒' UNION ALL SELECT 'L',N'鱳' UNION ALL SELECT 'M',N'旀' UNION ALL SELECT 'N',N'桛' UNION ALL SELECT 'O',N'漚' UNION ALL SELECT 'P',N'曝' UNION ALL SELECT 'Q',N'囕' UNION ALL SELECT 'R',N'鶸' UNION ALL SELECT 'S',N'蜶' UNION ALL SELECT 'T',N'籜' UNION ALL SELECT 'W',N'鶩' UNION ALL SELECT 'X',N'鑂' UNION ALL SELECT 'Y',N'韻' UNION ALL SELECT 'Z',N'咗' ) T WHERE word>=@word COLLATE Chinese_PRC_CS_AS_KS_WS ORDER BY PY ASC) ELSE @word END) SET @str=right(@str,len(@str)-1) END RETURN @PY END select * from T_BasicInformation  where dbo.fun_getPY(name) like N'%TH%'  --执行语句--


结果为:



这个函数的作用是按拼音查询!


二.存储过程与函数的同


        存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的


SQL语句。存储过程与函数的执行本质是一样的。存储过程和函数可以避免开发人员重复的编写相同的SQL语句。而


且,存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器端的数据传输。


当存储过程和函数被执行的时候,SQLManager会到PRocedure cache中去取相应的查询语句,如果在procedure 


cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。



三。存储过程与函数的异




总结:

       存储过程和函数都是被封装好的SQL 语句集合体,在SQL Server 中巧妙的使用存储过程和函数,有理由执行效


率的提高。如何选择使用存储过程和函数,需要根据自己需求来决定,同时也要合理的使用存储过程和函数,如果滥用


存储过程和函数,会更调试人员和后期人员带来很大的麻烦,因为存储过程或是函数是放在数据库中的,不易调试!


原创粉丝点击