写在前面


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

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

文章出处:原文

什么是存储过程


维基百科是这样定义存储过程的。它说存储过程是一组为了完成特定功能的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

Sqlserver 总结(2) 存储过程的更多相关文章

  1. JAVA使用JDBC技术操作SqlServer数据库执行存储过程

    Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...

  2. sqlserver 批量删除存储过程和批量修改存储过程的语句

    sqlserver 批量删除存储过程和批量修改存储过程的语句- sqlserver 批量删除存储过程和批量修改存储过程的语句,需要的朋友可以参考下. - 修改: 复制代码 代码如下: declare ...

  3. SQLServer分页查询存储过程

    项目中用到的SQLServer分页查询存储过程. [存储过程] create PROCEDURE prcPageResult -- 获得某一页的数据 -- @currPage int = 1,     ...

  4. sqlserver 批量删除存储过程(转)

    sqlserver一次只能删除一个存储过程,如果多了,需要很长时间才能删完,所以写了一段语句,直接就把当然数据库下所有用户自定义的存储过程给drop了.不过使用都请留心,当前打开的数据库哦.下面贴代码 ...

  5. SQLServer中系统存储过程sp_spaceused

    sp_spaceused 执行sp_spaceused存储过程的时候可以不用带参数,直接执行,或者exec sp_spaceused都可以,返回两个结果集: 列名 数据类型 描述 database_n ...

  6. SqlServer更新视图存储过程函数脚本

    --视图.存储过程.函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR ...

  7. mssql sqlserver 自动备份存储过程的方法分享

    转自:http://www.maomao365.com/?p=7847摘要: 为了更好的记录数据库中存储过程脚本的变化情况,下文采用数据库触发器来自动记载每次“存储过程”的变化(新增或修改),如下所示 ...

  8. SqlServer如何获取存储过程的返回值

    1.Output参数返回值 1 CREATE PROCEDURE [dbo].[upInformation]( 2 @age int , 3 @id bigint OUTPUT 4 ) 5 AS 6 ...

  9. SQLServer之删除存储过程

    删除存储过程注意事项 在删除任何存储过程之前,请检查依赖对象,并且相应地修改这些对象. 如果没有更新这些对象,则删除存储过程可能会导致依赖对象和脚本失败. 若要显示现有过程的列表,请查询 sys.ob ...

  10. SQLServer之修改存储过程

    修改存储过程注意事项 只能修改先前在 SQL Server 中通过执行 CREATE PROCEDURE 语句创建的过程. Transact-SQL 存储过程修改为 CLR 存储过程,反之亦然. AL ...

随机推荐

  1. Mongoose 索引

    Mongoose 索引介绍 索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更 快(如果有些字段是用不着的就不要设置索引).MongoDB 的索引几乎与传统的关系型数据库一 ...

  2. 使用GParted调整ubuntu根目录空间大小

    一.背景 Win10系统下安装ubuntu16.04双系统-常见问题解答 由于安装双系统时,ubuntu分区设置如下: 1) 主分区 ext4 / 30720MB 2) 主分区 swap area 8 ...

  3. 模拟26A 题解

    A. marshland 考试时想到了网络流,然而不会建图,就死了. 正解是最大费用可行流. 比较容易想到的是将每个点拆为两个点, s连没有危险值的入点, 没有危险值的入点连有危险值的入点,入点出点之 ...

  4. [BUAA软工]提问回顾与个人总结

    提问回顾与个人总结 项目 内容 所属课程 2019春季计算机学院软件工程(任健) 所属作业 提问回顾与问题总结 课程目标 理解软件工程的作用和重要性,提升工程能力,团队协作能力 作业目标 回顾软工课程 ...

  5. RocketMQ常用命令【转】

    首先进入 RocketMQ 工程,进入/RocketMQ/bin   在该目录下有个 mqadmin 脚本 . 查看帮助:   在 mqadmin 下可以查看有哪些命令 a: 查看具体命令的使用 :  ...

  6. Siam R-CNN: Visual Tracking by Re-Detection

    Siam R-CNN: Visual Tracking by Re-Detection 2019-12-02 22:21:48 Paper:https://128.84.21.199/abs/1911 ...

  7. mvn命令修改pom打包的版本号

    在java项目中打包经常需要修改镜像的版本号.可以使用如下命令 mvn versions: // 如果要打包使用人如下命令,打印详细信息使用 -X mvn clean deploy -e -Dskip ...

  8. mp4文件转码为m3u8

    https://bbs.csdn.net/topics/392046401 *********************************************** 转码完成,我直接播放m3u8 ...

  9. python初级(302) 5 列表

    一.复习 1.函数的创建 1) def关键字 2) 函数名及后面跟随的括号 3)冒号加上函数体 2.函数的调用 函数名及后面跟随的括号 3.带一个,二个,三个参数的函数及调用 二.列表 family ...

  10. Classic BAdi and New BAdi

    Former Member Classic BAdi and New BAdi ... 2007年04月27日 04:43 | 1.5k Views Hi all, I have a question ...