Sqlserver 总结(2) 存储过程

时间:2022-10-13 14:01:46

写在前面

存储过程在做项目的过程中,是会经常用到的东西。所以,以下结合我看到的资料和平时对存储过程的认识。写下我对存储过程比较浅显的认识。如果,文章有什么写的有问题的地方或者不好的地方。请随时@我,我会及时回复您的信息,并且认真对待每一次提出的问题与建议。人无完人,金无赤足。
文章出处:原文

什么是存储过程

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

存储过程的优点

1.执行速度快

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

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

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

3.安全

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

存储过程的分类

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

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

2.没有输入输出的存储过程

--创建存储过程
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 

3.有返回值的存储过程

--创建存储过程
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 

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

--创建存储过程

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 

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

--创建存储过程

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

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

--创建存储过程

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

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

--创建存储过程
create proc proc_alldt as 
begin
select * from sys_user; 
select * from sys_user where u_id='user';
end
go
--执行存储过程
exec proc_alldt