写在前面


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

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

文章出处:原文

什么是存储过程


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

    对象头 class oopDesc { ... private: volatile markOop _mark; union _metadata { Klass* _klass; narrowKlas ...

  2. PHP系列 | Thinkphp3.2 上传七牛 bad token 问题 [ layui.upload 图片/文件上传]

    前端代码 <div class="logo_out" id="upload-logo"></div> JS代码 /** * 上传图片 * ...

  3. easyui datagrid的editor编辑器如何为validatebox控件添加改变事件

    项目中需要为行编辑器Editor的某个列的文本框添加改变事件 需求:新增行时,为用户名输入特殊字符进行验证,不允许保存用户数据 html页面 <table id="gridlist&q ...

  4. Oracle 11g R2手动配置EM(转)

    转自:http://blog.itpub.net/9034054/viewspace-1973418/ Oracle 11g R2手动配置EM Oracle 作者:luashin 时间:2016-01 ...

  5. Mysql 有数据更新,无则插入

    项目中需要去更新数据的版本号. INSERT INTO Biz_CourseErrorBookDetail (CourseID,QuestionID,StudentID,ErrorCount,Last ...

  6. Oracle系列十五 控制用户权限

    权限 数据库安全性 --系统安全性 --数据安全性 系统权限: 对于数据库的权限 对象权限: 操作数据库对象的权限 系统权限 超过一百多种有效的权限 数据库管理员具有高级权限以完成管理任务,例如: 创 ...

  7. 解决 No IDEA annotations attached to the JDK 1.8和xml文件没有代码提示

    Android studio3.3 用着用着突然xml里没有代码联想了,忙着做其他的就没管,写xml的时候就硬写... 然后今天用着突然在class文件上方提示No IDEA annotations ...

  8. jquery checkbox全选和取消

    $("#allcheck").click(function(){ var allcheck=$('#allcheck').is(':checked'); $.each($(&quo ...

  9. (转)搭建Elasticsearch和kibana环境

    搭建Elasticsearch和kibana环境 作者:IT云清 原文:https://blog.csdn.net/weixin_39800144/article/details/81162002 1 ...

  10. 量化编程技术—itertools寻找最优参数

    # -*- coding: utf-8 -*- # @Date: 2017-08-26 # @Original: ''' 在量化数据处理中,经常使用itertools来完成数据的各种排列组合以寻找最优 ...