zoukankan      html  css  js  c++  java
  • Sqlserver 总结(2) 存储过程

    前言


    存储过程在做项目的过程中,是会经常用到的东西。所以,以下结合我看到的资料和平时对存储过程的认识。写下我对存储过程比较浅显的认识。如果,文章有什么写的有问题的地

    方或者不好的地方。请随时@我,我会及时回复您的信息,并且认真对待每一次提出的问题与建议。人无完人,金无赤足。

    文章出处:原文

    什么是存储过程


    维基百科是这样定义存储过程的。它说存储过程是一组为了完成特定功能的SQL 语句集。而对于我的理解存储过程就是一个预先编译好的T-SQL语句。

    存储过程的优点


    1.执行速度快

    *由于数据库运行的过程中,是先编译后运行的。然而存储过程是一个编译过的代码块,所以执行效率会比T-SQL语句块。

    2.降低了网络的通讯,提高通讯的效率

    *由于一个存储过程在程序网络中交互可以替代大量的T-SQL语句。所以,它能降低网络的通讯量,提高通讯的效率。

    3.安全

    *通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保了数据的安全。

    存储过程的分类


    只返回单一记录集的存储过程

    --创建存储过程
    create proc proc_SingleValue as
    begin
    select * from sys_user
    end
    go
    --执行存储过程
    exec proc_SingleValue 
    
    

    没有输入输出的存储过程

    --创建存储过程
    create proc proc_NoInOut as
    begin
    insert into sys_user(user_id,u_id,u_password,gender,user_name,creation_time,creation_user,
    update_time,update_user,status) values(newid(),'admin','admin','y','admin',getdate(),'管理员'
    ,getdate(),'','y')
    end
    go
    --执行存储过程
    exec proc_NoInOut 
    
    

    有返回值的存储过程

    --创建存储过程
    create proc proc_returnValue as
    begin
    insert into sys_user(user_id,u_id,u_password,gender,user_name,creation_time,
    creation_user,update_time,update_user,status) 
    values(newid(),'admin','admin','y','admin',getdate(),'管理员',getdate(),'','y')
    end
    return @@rowcount
    go
    --执行存储过程
    exec proc_returnValue 
    
    

    有输入参数和输出参数的存储过程

    --创建存储过程
    
    create proc proc_InOut 
    @username nvarchar(50),
    @userpwd nvarchar(50),
    @errornum int output
    as
    begin
        select @errornum=count(*) from sys_user where u_id=@username  and u_password=@userpwd;
    end
    go
    
    --执行存储过程
    exec proc_InOut 
    
    

    同时具有返回值、输入参数、输出参数的存储过程

    --创建存储过程
    
    create proc proc_InOut_returnValue 
    @username nvarchar(50),
    @userpwd nvarchar(50),
    @errornum int output
    as
    begin
        if(@username='admin' and@userpwd='admin')
            select @errornum=count(*) from sys_user where u_id=@username  and u_password=@userpwd;
        else
            set @errornum=0;
        return @@rowcount
    end
    go
    --执行存储过程
    exec proc_InOut_returnValue 'admin','admin',null
    
    
    

    同时返回参数和记录集的存储过程

    --创建存储过程
    
    create proc proc_returnValue_returnds 
    @username nvarchar(50),
    @userpwd nvarchar(50),
    @errornum int output
    as
    begin
        if(@username='admin' and@userpwd='admin')
            select @errornum=count(*) from sys_user where u_id=@username  and u_password=@userpwd;
        else 
            set @errornum=0;
    
        select * from sys_user;
        return @@rowcount;
    end
    go
    --执行存储过程
    exec proc_returnValue_returnds 'admin','admin',null
    
    

    返回多个记录集的存储过程

    --创建存储过程
    create proc proc_alldt as 
    begin
    select * from sys_user; 
    select * from sys_user where u_id='user';
    end
    go
    --执行存储过程
    exec proc_alldt
    
    
  • 相关阅读:
    Angular 组件通信的三种方式
    Vue 之keep-alive的使用,实现页面缓存
    Angular Service设计理念及使用
    Git提交规范
    angular的生命周期
    CPU 是如何认识和执行代码的
    Ubuntu 常用软件
    UltraSQL / sqlserver-kit (SQLServer DBA )高手
    便宜的网站模板下载
    Audio over Bluetooth: most detailed information about profiles, codecs, and devices
  • 原文地址:https://www.cnblogs.com/ZengJiaLin/p/11139101.html
Copyright © 2011-2022 走看看