今天来讲解一下sqlserver的存储过程,我一般习惯先从一个最简单的例子开始,然后再介绍他的语法,最后会举出一些常用和典型的存储过程
1.先看一个简单地例子,形成一个印象
假设有这样一张表People
我要写一个登录的存储过程,我们先来看看验证登录的sql语句,非常简单select count(*) from People where userName=‘xxxx‘ and password=‘xxxx‘,如果返回结果大于1,就证明用户存在,否则用户不存在
下面这个就是登录的存储过程
1 Create proc proc_Login 2 ( 3 @name varchar(20), 4 @pwd varchar(20) 5 ) 6 as 7 declare @count int 8 begin 9 10 set @count=(select count(*)from dbo.People where userName=@name and password=@pwd) 11 12 if @count>0 13 print ‘成功‘ 14 else 15 print ‘失败‘ 16 END
这是个最简单的存储过程,但是包含的东西却很多
首先,看一下创建存储过程的语法格式,笔者就是老记不住这个语法,其实创建存储过程的语法相当简单
create proc 这里写创建的存储过程名字
(
这里写参数
参数的名字要加上@符号,比如
@name varchar(20),
@pwd varchar(20)
)
as
这里写定义的变量,也可以写sql语句
注意存储过程的语法,就到这里就结束了
后面的DECLARE也好,begin也好,都不是创建存储过程的必须语法
来看一下书面的定义
1 create proc | procedure pro_name 2 (
@参数数据类型 [=默认值] [output], 3 @参数数据类型 [=默认值] [output], ) 6 as 7 SQL_statements
再来看一下不带参数的存储过程
先看一个例子
1 CREATE PROC proc_SelectAll 2 AS 3 SELECT * FROM dbo.People
然后是执行
1 EXEC proc_SelectAll
怎么样,是不是简单,这就是一个存储过程了
下面来看一下书面的定义
1 create proc | procedure pro_name 2 as 3 SQL_statements
发现没,创建一个存储过程你只需要记住一个create,一个proc,一个as就可以了
定义与修改过程参看这篇文章http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html
下面简单介绍一下存储过程,存储过程有两种,一种是系统存储过程,一种用户自定义的存储过程
系统存储过程我用的比较多的就是重命名的存储过程
--表重命名 exec sp_rename ‘stu‘, ‘stud‘; select * from stud; --列重命名 exec sp_rename ‘stud.name‘, ‘sName‘, ‘column‘; exec sp_help ‘stud‘;
常见存储过程总结
1.分页存储过程
先来介绍一下分页存储过程的实现思路,分页存储过程有n种实现方法,本文将来一定尽可能多收集一些
先来第一种,利用select top 和not in来实现
先来看看这个sql语句select top(10) * from people where people.id not in (select top(100) people.id from people)
先讲解第一部分select top(100) people.id from people
这一句很好理解,就是从people表中筛选出前100个id,这里暂时排除排序这些因素
第二句select top(10) * from people where people.id not in(......)
这一句是从人员表中筛选出前10个id不在(...)中的id
先筛选出前100id,然后再筛选出前10个不在前100个id中的id,其实就实现了筛选第101-110个元素的,这就是利用select top 和not in来实现分页存储过程的原理。道理是这样,但是要实际写出这个存储过程还是有点费劲的,我们接下来来一点一点做。