存储过程与函数

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


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


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



一.定义


1.存储过程


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


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


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


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


例如:


Create  PROCEDURE  [dbo].[PROC_CR_Insert_OnComputerRecord]
@StudentCardID char(11),  --卡号
@Ondate date ,       --上机日期
@Ontime char(10) ,       --上机时间
@ComoputerNo char(20)    --机房号
As
begin 
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 中巧妙的使用存储过程和函数,有理由执行效


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


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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弯_弯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值