网络编程
位置:首页>> 网络编程>> 数据库>> 我对SQL SERVER 存储过程见解

我对SQL SERVER 存储过程见解

作者:shen.li 来源:秋寒博客 发布时间:2009-10-31 18:51:00 

标签:存储过程,sql,server,sql

从2003年到现在,从ACCESS到SQL SERVER的使用。在ACCESS中没有存储过程的概念。在使用过程中,发现ACCESS与SQL SERVER的区别很大,特别是在大数据的应用中表现差异。在ACCESS中类似SQL SERVER存储过程的功能是查询,本文也会有所提及。

主要内容:

1、 存储过程的定义;

2、 存储过程好处;

3、 存储过程的简单实例;

4、 总结;

存储过程的定义:

SQL SERVER 联机丛书中的定义:

存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。也可以创建在 Microsoft SQL Server 启动时自动运行的存储过程。

我对存储过程的定义是:

存储过程是提供用户在数据库服务端编程的SQL语句集,它以T-SQL语法为标准,提供高级编程(脚本解释型语言)。它可返回或不返回数据集。说通俗一点,就是在服务端把数据库里的数据按照自己的要求规整出来。


存储过程好处:

对于传统的方式而言,存储过程提供了很多的便利,例如:

1、 简化了程序代码;

2、 直接返回想要的数据;

3、 加快了程序的速度;

4、 类似函数的,一次定义,多出调用;



简化了程序代码

传统方式我们先从数据库中读取数据,然后根据不同的值做不同的操作。如果涉及到的条件比较多,那么程序代码会很长,比较难阅读和难维护。而存储过程中可以直接返回所要的数据,这些判断和条件都可以在存储过程中完成。


直接返回想要的数据

基于上一点,不需要在程序中根据不同的值来做不同的数据处理。直接在存储过程中即可完成数据的处理。


加快了程序的速度

基于上一点,在程序中进行的数据库操作减少了。以前可能需要进行3、5次数据操作,通过存储过程只要一次数据库操作即可完成,并且减少程序中的数据处理和判断。


类似函数

传统发方式,如果多个页面中有相同的功能(返回相同数据或对数据库操作方式是一样的),但是确有差异。我们需要把页面复制多份,再来修改。这时,我们可以将这些数据库操作做成存储过程,在多个页面中使用。如果日后数据库操作部分有所变动,只要修改程序过程即可,程序基本上可以保持不变。



存储过程的简单实例:

以用户登录验证为实例。

表:User (Id, UserName, Password, LastLoginDatetime, LastLoginIP)


传统方式:

用户输入用户名和密码提交登录后,从数据库里查询UserName=用户的记录。如果存在,在则比较Password与密码是否等值,不存在则提示用不存在。如果相等,则登录成功,不相等则提示密码错误。用户登录成功以后,更新用户的最后登录时间和登录IP。


1、用户输入:用户名 密码

2、查询:SELECT Password FROM [User] WHERE [UserName]=’用户名’

3、存在: 比较用户输入密码与Password

4、相等:提示登录成功。更新用户登录时间几登录IP。

5、不相等:提示密码错误。

6、不存在:提示用户不存在。


用存储过程:

提交用户名、密码、登录IP参数,返回信息和代码。

根据代码进行下一步操作。

在这种方法中,存储过程代替了2、3、4几个步骤,把5、6简化为一个步骤。

存储过程如下:

CREATE PROCEDURE [checkUserLogin]
(
@username nvarchar(200),
@password nvarchar(64),
@loginip nvarchar(20)
)
AS
declare @returnMsg nvarchar(1000)
declare @returnCode tinyint
declare @password1 nvarchar(64)
set @returnMsg = "未定义"
set @returnCode = 0
--0 : 未定义
--1 : 登录成功
--2 : 用户不存在
--3 : 密码错误
select @password1 = password form [User] where username=@username
if @password1 is null
begin
set @returnMsg = "用户不存在"
set @returnCode = 2
end
else if @password1<>@password
begin
set @returnMsg = "密码错误"
set @returnCode = 3
end
else
begin
set @returnMsg = "登录成功"
set @returnCode = 1
update [User] set LastLoginDatetime='' + getdate() + '', LastLoginIP='' + @loginip + '' where username=@username
end
select @returnCode, @returnMsg



这个存储过程的名称为“checkUserLogin”,需要输入三个参数“@username”,“@password”,“@loginip”,返回一个记录集,包含返回代码(@returnCode)和返回信息(@returnMsg)。


新的程序只要执行这个存储过程并传入三个参数,然后用返回的信息作为提示信息,根据返回的代码判断下步如何跳转。


总结:

合理的使用存储过程,可以大大提高程序可读性、易维护性及开发周期。上面所提到的只是存储过程中的皮毛。存储过程真正的好处,是谁用谁知道。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com