存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句。经过编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数来执行)。

        存储过程分为两类:系统提供的存储过程和用户自定义的存储过程。

        系统SP,主要存储在master 数据库中,并以sp_为前缀;

        系统存储过程主要是从系统表中获取信息,从而为系统管理员管理SQL Server。


存储过程的好处:

1)重复使用:存储过程可以重复使用,从而可以减少数据库开发人员的工作量;

2)提高性能:存储过程在创建的时候就进行了编译,将来使用的时候不用再重新编译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率;

3)减少网络流量:存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量;

4)安全性:参数化的存储过程可以防止SQL注入式的攻击,而且可以将Grant、Deny以及Revoke权限应用于存储过程。

 

定义存储过程的语法:

CREATE  PROC[EDURE]  存储过程名
    @参数1  数据类型 = 默认值,
    …… ,
    @参数n  数据类型 OUTPUT
AS
SQL语句
GO

说明:参数是可选的,参数分为输入参数、输出参数(OUTPUT),输入参数允许有默认值。
 

这里来举一个简单的存储过程例子:

CREATE PROCEDURE userLogin
@name varchar(20),
@password varchar(20)
AS
BEGIN
select * from userinfo where userName=@name and userPass=@password
END
GO

首先我们用简单的sql语句在查询分析器查询:

select * from userinfo where userName='admin'

查询结果:

---------------------
UserName    UserPass
Admin          Admin

 

现在我们来执行我们的存储过程:

exec UserLogin admin,admin

或这样调用:

EXEC UserLogin @name='admin',@password='admin'

查询结果:

---------------------
UserName    UserPass
Admin          Admin

注意:

在SQL SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。

只要将以上代码在“查询分析器”(新建查询之后弹出的界面)里执行一次,SQL SERVER就会在当前数据库中创建一个名为“UserLogin”的存储过程。

你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择"可编程性->存储过程",此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可),如果找不到可通过新建筛选器查询。

 

在数据中调用执行存储过程的方法有两种(这里EXEC与EXECUTE等效);

EXEC  存储过程名  参数值1,参数值2,....

或者

EXEC  存储过程名  参数1=参数值1,参数2=参数值2,....
上面我们也看到了。

 

如果要删除一个存储过程,用drop;

像这样:

drop PROCEDURE UserLogin

创建这样的存储过程有什么用呢,不就是只能在数据库中查看?

非也,譬如我们在做web或者winform 程序或其他项目开发时,假设需要做个登录,好,我们可以调用这个存储过程来登录,根据传入的参数,如果查询出来有记录,那么这条记录在数据库中存在,表示登录成功,否则失败。

这样做的目的是更加安全,可以防止sql注入。