存储过程自学

来源:互联网 发布:多路访问网络 编辑:程序博客网 时间:2024/06/18 18:25

**存储过程:
概念: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
原创粉丝点击