存储过程自学

**存储过程:
概念:procedure存储过程是为了完成一组特定功能的sql语句的集合,经过编译后存储在数据库中,用户通过指定存储过程的名称并且给出参数来调用执行!
特点:1:存储过程可以包括逻辑控制语句和数据操纵语句(DML)。
2:存储过程可以接收参数,输出参数,返回单个或者多个结果集以及返回值。
3:存储过程由于在创建的时候就进行了编译并且存储在数据库当中,所以运行效率上要快于一般SQL。
优点:1:代码重复调用:可以多次被调用执行,无需重新编写该存储过程的sql语句。开发人员可以随时都存储过程的sql语句进行更改,而对代码来说毫无影响提高了代 码的可移植性。
2:运行效率:存储过程可以是预编译的,所以运行效率远远大于批处理的sql语。(因为批处理语句是每执行一次就编译一次)
3:减轻网络流量:当程序调用存储过程的时候,网络中传递的只是该调用语句,否则将会是多条sql语句。从而减少了网络流量,降低了网络负载。
4:系统管理员可以对执行的某一个存储过程进行权限限制,实现对某些数据的访问限制,提高数据的安全性。
创建存储过程:

create proc proc_get_student
as //as可以省略不写
select * from student;

调用执行存储过程:
exec proc_get_student

创建带参数的存储过程:
      create proc proc_find_stu(@startId int, @endId int)
       as
           select * from student where id between @startId and @endId
       go

      exec proc_find_stu 2, 4;
 带通配符的存储过程:
    ```
        create proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20) = '%')
        as
            select * from student where name like @name and name like @nextName;
        go
        exec proc_findStudentByName;
        exec proc_findStudentByName '%o%', 't%';
    ```
  带有局部变量的存储过程:
    ```
        CREATE PROCEDURE UserLogin
            @name varchar(20),         --全局变量不需要用declare。
            @password varchar(20)
            AS
                -- 定义一个临时用来保存密码的变量
                --DECLARE @strPwd NVARCHAR(20) --局部变量需要用declare来表示。
            BEGIN
                select * from userinfo where userName=@name and userPass=@password
            END
        GO
        首先我们用简单的sql查询
            select * from userinfo where userName='admin'
        查询结果:
        ---------------------
        UserName  UserPass
        Admin      Admin
        现在我们来执行我们的存储过程
        exec UserLogin admin,admin
        --或这样调用:
        EXEC UserLogin @name='admin',@password='admin'
        查询结果:
        ---------------------
        UserName  UserPass
        Admin      Admin
    ```
    带有输出参数的存储过程:
       ```
        create proc proc_getStudentRecord(
            --全局参数
            @id int, --默认输入参数
            @name varchar(20) out, --输出参数
            @age varchar(20) output--输入输出参数
        )
        as
            select @name = name, @age = age  from student where id = @id and sex = @age;
        go

        --局部参数
        declare @id int,
                @name varchar(20),
                @temp varchar(20);
        set @id = 7; 
        set @temp = 1;
        exec proc_getStudentRecord @id, @name out, @temp output;
        select @name, @temp;
        print @name + '#' + @temp;         

“`

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值