SQL 存储过程的使用对数据的操作(整理思绪补基础)

什么是存储过程?

             存储过程是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:我也是通过一步一步来做一步步的去实现,祝大家也成功辣。

    原文作者:数据库基础
    原文地址: https://my.oschina.net/Shilu/blog/793785
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞