日期:2011-09-14  浏览次数:20349 次

在ASP.Net项目中使用存储过程,首先可以提高数据库的安全性,其次可以提高运行SQL代码运行的速度,在大型项目中一般是必不可少的。Visual Studio.Net为SQL的存储过程提供了强大的支持,您既可以通过visual studio.net来新建存储过程,也可以直接在Sql Server的查询分析器中运行,还可以通过企业管理器创建,使用起来也非常方便。大家一直都误认为SQL存储过程是一个比较“高深”的技术,其实掌握一般的语法是没有什么大问题的,而我们在使用存储教程中也主要是增删减的操作,学会使用一般的T-SQL就很容易上手了。
我们先来看一下在Sql-server中是如何创建一个存储过程的吧,我们可以使用SQL命令语句创建,也可以通过SQL server中的企业管理器来创建,但其实都是离不开自己写语句的,当然系统存储过程我们就不用去动它了(存储过程分为系统存储过程 ,本地存储过程,临时存储过程,远程存储过程,扩展存储过程),而本地存儲過程就是我們自己編寫的存储过程,其实也叫用户存储过程。

当创建存储过程时需要确定存储过程的三个组成部分
所有的输入参数以及传给调用者的输出参数
被执行的针对数据库的操作语句包括调用其它存储过程的语句
返回给调用者的状态值以指明调用是成功还是失败
一、存储过程创建
1.用企业管理器来创建存储过程;
我们先打开企业管理器,找到我们要创建存储过程的数据库,如图一:


按此在新窗口打开图片


我们可以看到,在数据库里面有一个存储过程的项目,我们要用到的就是它了,选中存储过程这项,我们可以看到数据库中里面本身就有很多存储过程存在的了,不过这些都是数据库本身自带的,我们可以看到他的类型是系统(如图二),如果我们自己创建的存储过程,类型就是用户了.


按此在新窗口打开图片

在控制树的左边,我们选中存储过程后单击鼠标右键,可以看到有一个“创建存储过程的选项”


按此在新窗口打开图片


选中这项,就会出现新的窗口了,这个窗口就是用来写存储过程的了


按此在新窗口打开图片

在实际运用过程中,我们所创建的存储过程并不是想像中的这么复杂,而上面的这些参数也不是都要用上,但一般我们在用查询分析器创建存储过程前,都会通过下面这条语句来查询一下,在数据库中是否已经存在相同命名的存储过程,如果存在的话,则先删除。

If exists(select name from sysobjects where name=’存储过程名’ and type=’p’)
Drop procedure ‘存储过程名’
Go

在这里,我们也就知道了如何删除一个存储过程了,就是用drop procedure关键字 + 存储过程名.

我们先列举几个常见的存储过程:

a.    没有使用参数的存储过程
/*
用途:查询所有的公司名录
德仔创建于2006-3-29
*/
create procedure com_select
as
select * from Company
GO

b.    有参数的存储过程
/*
选择对应的admin
创建者:德仔
创建日期:2006-4-20
*/
create procedure admin_select
@adminusername char(50),
@adminpassword char(50)
as
select * from superadmin where
[Admin_Name]=@adminusername and [Admin_Password]=@adminpassword
GO


c.    在该存储过程中使用了OUTPUT 保留字有返回值的存储过程
create procedure salequa
 @stor_id char 4 ,
@sum smallint output
as
select 
ord_num, ord_date,
 payterms, title_id,
 qty
from sales
where stor_id = @stor_id
select @sum = sum qty
from sales
where stor_id = @stor_id
go


上面的几个存储过程是基本的存储过程,同时我们可以看到在存储过程中注释是用/* 注释 */形式.


我们下一次再讲讲存储过程在net中的使用吧
 二、存储过程使用篇

1.    在SQL中执行
执行已创建的存储过程使用EXECUTE 命令其语法如下
[EXECUTE]
{[@return_statur=]
{procedure_name[;number] | @procedure_name_var}
[[@parameter=] {value | @variable [OUTPUT] | [DEFAULT] [,…n]
[WITH RECOMPILE]
各参数的含义如下