什么是存储过程?
存储过程是SQL语句和控制语句的 预编译集合 ,保存在数据库里,可由应用程序调用执行,而且容许用户声明变量,逻辑控制语句及其他强大的编程功能。而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程可包含逻辑控制语句和数据操作语句,它可以接收参数,输出参数,返回单个或多个结果集及返回值。
存储过程在创建时即在服务器上进行编译, 执行起来比单个SQL语句快。简单来讲就是:存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
存储过程的优点?
①重复使用(话说写程序很多东西都可以重复利用..)
②减少网络流量(只是通过一个指令就能让数据库自动实现某些功能)
③安全性 (可以防止SQL注入式攻击)
详细参考:http://baike.baidu.com/view/68525.htm
第一步:创建数据库
— 切换到 master
use master
go
— 在指定地方生成文件夹
— 调用系统已存在的存储过程
exec xp_cmdshell 'mkdir D:\demo\存储过程\Stored',no_output
— if exists (‘表达式’){}
— 用于检测是否存在当前创建的数据库 select * from sysdatabases where name = ‘_数据库名_’
— 用于检测是否存在当前创建的存储过程 select * from sysobjects where name = ‘_存储过程名_’
— 删除数据库
drop database _数据库名_
go
— 创建数据库
if exists(select * from sysdatabases where name = 'Stored') -- 查询方法
drop database AAA
-- 如果返回有数据执行删除数据库
create database Stored -- 创建数据库
on primary
(
name = 'Stored.mdf', -- 数据库名称 *.mdf
filename = 'D:\demo\存储过程\Stored\Stored.mdf', -- 保存路径
size = 3mb, -- 初始大小
maxsize = 10mb, -- 增长最大值
filegrowth = 15% -- 增长率
)
log on
(
name = 'Stored.ldf' -- 日志文件名称 *.ldf
,filename = 'D:\demo\存储过程\Stored\Stored.ldf' -- 保存路径,基本同上
,size = 1mb
,maxsize =5mb
,filegrowth = 15%
)
go
第二步:创建数据表
— 切换刚才创建的数据库
use Stored
go
— 创建数据表
create table Teach
(
-- 列名 类型 非空 主键 标识列(开始数,增长率)
teachID int not null primary key identity(1,1) , -- 教材ID 主键约束
teachCode varchar(20) not null , -- 教材编码 检查约束
teachName varchar(50) not null , -- 教材名称
teachPublisher nvarchar(50) not null default ('中山'), -- 教材出版 默认约束
)
go
— 查看数据表是否成功创建
select * from Teach
go
第三步:使用存储过程实现批量插入1000条数据
— 存储过程的使用
— 查看存储过程
exec proc_InsertTeach
— 删除存储过程
drop proc _存储过程名_
go
— 创建存储过程
create proc proc_sql
[ {@参数 数据类型}[=默认值][OUTPUT]
as
T-SQL语句
go
上面只是铺垫环境,如果你已经有环境可以直接忽略..咯咯咯咯咯..
其实这里才是真正的开始…
利用存储过程实现增删改查
— 插入数据
— 方法一 创建添加数据的存储过程然后循环调用
create procedure proc_InsertTeach
(
@table nvarchar(255),
@values nvarchar(max)=null
)
as
declare @sql nvarchar(max)
set @sql='insert into '+@table
if @values is not null
set @sql='insert into '+@table+' values('+@values+')'
exec sp_executesql @sql
select @@IDENTITY
go
— 方法二,批量直接自动生成1000条数据
create proc insertdata
as
declare @i int
set @i=1
while (@i<=1000)
begin
insert into Teach values('DN00'+ cast(@i as varchar),'和时间做朋友','时间')
set @i=@i+1
end
go
— 调用存储过程单行插入
exec proc_InsertTeach Teach,"'DN001','和时间做朋友','时间'"
go
— 或者调用存储过程批量生成1000次(速度慢)
declare @i int
set @i = 1
while (@i <= 1000)
begin
exec proc_InsertTeach Teach,"'DN001','和时间做朋友','时间'"
set @i = @i + 1
end
— 清空数据表的所有数据
Truncate Table Teach
go
— 删除数据
— 方法一
create procedure proc_DeleteTeach
(
@table nvarchar(255),
@where nvarchar(max)=null
)
as
declare @sql nvarchar(max)
set @sql='delete '+@table
if @where is not null
set @sql+=' where '+@where
exec sp_executesql @sql
go
— 调用存储过程’按照条件’删除
exec proc_DeleteTeach Teach,'teachID = 1'
go
— 修改数据
create procedure proc_UpdateTeach
(
@table nvarchar(255),
@set nvarchar(max),
@where nvarchar(max)=null
)
as
declare @sql nvarchar(max)
set @sql='update '+@table+' set '+@set
if @where is not null
set @sql+=' where '+@where
exec sp_executesql @sql
go
— 调用存储过程’按照条件’修改
exec proc_UpdateTeach Teach,'teachName=''时间规划局''','teachID=2'
go
exec proc_UpdateTeach Teach,'teachName=''时间规划局'',teachPublisher=''康师傅''','teachID=3'
go
— 查找数据
create procedure proc_SelectTeach
(
@table nvarchar(255),
@where nvarchar(max)=null
)
as
declare @sql nvarchar(max)
set @sql='select * from '+@table
if @where is not null
set @sql=@sql+' where '+@where
exec sp_executesql @sql
go
— 查找所有数据
exec proc_SelectTeach 'Teach'
go
— 根据条件查找对应数据
exec proc_SelectTeach 'Teach','Teachid=2'
go
至此,存储过程还有许多暂时增删改查足够用的辣。
PS:我也是通过一步一步来做一步步的去实现,祝大家也成功辣。