• 什么是存储过程?有什么优点?具体实例?


    一、存储过程:
    存储过程是SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。
    二、存储过程的优点:
      1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
      2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
      3.存储过程可以重复使用,可减少数据库开发人员的工作量
      4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权

     

    三、实例:

          1.

    create proc proc_stu 
    @sname varchar(20), 
    @pwd varchar(20) 
    as 
    select * from ren where sname=@sname and pwd=@pwd 
    go
    
    
    查看结果:proc_stu 'admin','admin'

     

    2.下面的存储过程实现用户验证的功能,如果不成功,返回0,成功则返回1

    CREATE PROCEDURE VALIDATE @USERNAME CHAR(20),@PASSWORD CHAR(20),@LEGAL BIT OUTPUT
    AS
    
    IF EXISTS(SELECT * FROM REN WHERE SNAME = @USERNAME AND PWD = @PASSWORD) 
    SELECT @LEGAL = 1 
    ELSE 
    SELECT @LEGAL = 0

    在程序中调用该存储过程,并根据@LEGAL参数的值判断用户是否合法。

    3.一个高效的数据分页的存储过程 可以轻松应付百万数据

    CREATE PROCEDURE pageTest --用于翻页的测试
    --需要把排序字段放在第一列
    
    (
    @FirstID nvarchar(20)=null, --当前页面里的第一条记录的排序字段的值
    @LastID nvarchar(20)=null, --当前页面里的最后一条记录的排序字段的值
    @isNext bit=null, --true 1 :下一页;false 0:上一页
    @allCount int output, --返回总记录数
    @pageSize int output, --返回一页的记录数
    @CurPage int --页号(第几页)0:第一页;-1最后一页。
    )
    
    AS
    
    if @CurPage=0--表示第一页
    begin
    --统计总记录数
    select @allCount=count(ProductId) from Product_test 
    
    set @pageSize=10
    --返回第一页的数据
    select top 10 
    ProductId,
    ProductName,
    Introduction 
    from Product_test order by ProductId 
    end
    
    else if @CurPage=-1--表示最后一页
    
    select * from 
    (select top 10 ProductId,
    ProductName,
    Introduction
    
    from Product_test order by ProductId desc ) as aa 
    order by ProductId
    else
    
    begin 
    if @isNext=1
    --翻到下一页
    select top 10 ProductId,
    ProductName,
    Introduction
    from Product_test where ProductId > @LastID order by ProductId 
    else
    --翻到上一页
    select * from
    (select top 10 ProductId,
    ProductName,
    Introduction
    from Product_test where ProductId < @FirstID order by ProductId desc) as bb order by ProductId
    end

     

     

  • 相关阅读:
    fatal error C1902: 程序数据库管理器不匹配;请检查安装 (zz)
    c++ std string reserve 测试
    2018年长沙理工大学第十三届程序设计竞赛
    2018年东北农业大学春季校赛
    从本质看海明码——海明码的由来
    CodeForces475
    一维背包问题
    2018年长沙理工大学第十三届程序设计竞赛 箱庭的股市
    高精度加法模板
    for,while,do while
  • 原文地址:https://www.cnblogs.com/crystaltu/p/6370059.html
Copyright © 2020-2023  润新知