SQL SERVER存储过程入门
发布时间:2007-6-21 10:05:42
这里我们只是一些最最简单的入门级知识,下面以SQL SERVER为例来讲一下简单的存储过程语法,其中的conn.asp包含是数据库连接语句,conn_close.asp包含是清空数据库连接语句,这里不作介绍。
一、创建存储过程,在sql server的查询分析器中创建存储过程这里将略过,方法是打开sql server查询分析器,把存储过程语句直接复制过去,点绿色小按钮运行就OK.
<例一>
1.<!--#include file="conn.asp"-->
2.<%
3.set rs=conn.execute("create proc uid as select id from user order by id desc")
4.set rs=nothing
5.%>
6.<!--#include file="conn_close.asp"-->
现在来简单的介绍一下存储过程语法:
建立存储过程的基本语法为:create proc [存储过程名] [参数列表(多个以","分隔)] as (begin) [SQL语句] (end)
如果as之后超过一条语句,必须用begin end 所包含起来,单条SQL语句的话,begin end 可省略。
现在我们来分析一下<例一>中的存储过程语句,首先是create proc,提示SQL server将要创建一个存储过程,uid 为存储过程名,名称区分大小写,as后面跟sql语句"select id from user order by id desc",该SQL语句为最简单的SQL语句,这里不再介绍该语句实现的功能。
我们在这里使用execute方法来执行该存储过程语句,让其将存储过程添加到sql server中去,set rs=conn.execute(sqlstr)方法,sqlstr可以为sql语句也可为存储过程语句。
上面这个是最简单最基本的存储过程,这完全不能发挥存储过程的作用,下面我们再看一下添加了参数的存储过程,存储过程称为第五代编程语言,当然是要带上参数了。
<例二>
1.create proc u_id
2.@user varchar(20)
3.@pwd varchar(20)
4.@ck_ok int output
5.as
6.declare @strpwd varchar(20)
7.begin
8. if user=null
9. set @ck_ok=1
10. else
11. select @strpwd=pwd from user where user=@user
12. if @strpwd=@pwd
13. set @ck_ok=2
14. else
15. set @ck_ok=1
16.end
<例二>是一个简单的用户名/密码验证存储过程,下面我们来一行一行代码来分析:
第1行:提示sql server将创建一个存储过程
第2,3行:建立参数列表,存储过程中用户创建的所有参数变量都是以@开头,该参数的赋值是应用程序传递赋值的,第二行为用户名,第三行为密码
第4行:建立一输出参数,关键词output说明该参数为输出参数
第5行:as提示下面为SQL语句
第6行:关键词declare表示建立一临时变量,用来保存从数据库内取出的密码
第7行:begin提示下面将为超过一句的语句,为一语句段
第8,9行:判断用户名是否为空,如果为空,则输出参数值为1
第10行:else表示将执行用户名不为空的情况
第11行:SQL语句,不再解释,普通的SQL查询语句
第12行:判断临时变量strpwd是否与输入变量pwd值相等,即判断输入的密码是否与数据库内密码相等
第13行:当密码相等时,输入参数值为2
第14,15行:判断密码不正确时,输入参数值为1
第16行:end与第7行的begin相对应,说明as语句块结束
该存储过程可以在SQL SERVER的查询分析器中运行,直接添加到SQL SERVER中去,下面是在ASP中如何创建该存储过程,即把存储过程写成一行.
1.<!--#include file="conn.asp"-->
2.<%
3.set rs=conn.execute("create proc u_id @user varchar(20) @pwd varchar(20) @ck_ok int output as declare @strpwd varchar(20) begin if user=null set @ck_ok=1 else select @strpwd=pwd from user where user=@user if @strpwd=@pwd set @ck_ok=2 else set @ck_ok=1
end")
4.set rs=nothing
5.%>
6.<!--#include file="conn_close.asp"-->
运行该程序就可以在sql server中添加一名为u_id的存储过程.添加后可以打开sql server企业管理器,找到所属的数据库,点击存储过程,如果没看到就刷新一次.
二、ASP中调用存储过程
<例三>
先调用一下<例一>所创建的存储过程,并分行把用户ID值输出
1.<!--#include file="conn.asp"-->
2.<%
3.set rs=conn.execute("uid")
4.do while not rs.eof
5. response.write"<br />"&trim(rs("id"))
6. rs.movenext
7.loop
4.set rs=nothing
5.%>
6.<!--#include file="conn_close.asp"-->
我们来分析一下<例三>中的代码,其它代码都不讲了,单讲一下第3行和第5行的代码,第3行就是利用execute方法调用名为uid 的存储过程,当然可以使用command和open方法,这里不再介绍,方法差不多,就是execute()跟open()方法的区别.第5行是输出返回值.
下面再讲一下如何给存储过程传递参数值,以<例二>所创建的存储过程为例,<例二>中有两个参数,即@user和@pwd
<例四>
1.<!--#include file="conn.asp"-->
2.<%
3.user=trim(request.form("user")) '从表单接收用户名
4.pwd=trim(request.form("pwd")) '从表单接收密码
5.set rs=conn.execute("u_id '"&user&"','"&pwd&"'")
6.if trim(rs("ck_ok"))=1 then
7. response.write"用户名密码不正确"
8.else
9. response.write"登录成功"
10.end if
4.set rs=nothing
5.%>
6.<!--#include file="conn_close.asp"-->
其它代码也不讲介绍了,就介绍一下第5行,调用带参数的存储过程,参数与存储过程名之间用空格分隔,多个参数,参数之间用","进行分隔.处理返回值rs("ck_ok")为1还是2,为1表示登录不成功,为2表示登录成功.
重申一下这只是最最简单的存储过程创建与调用,存储过程能有非常强大的功能,关于更高深的存储过程编程可参考sql server的联机文档或到网上搜索.