存储过程

本文详细介绍了存储过程的概念、优点及创建方法。包括不带参数、带参数及有返回值的存储过程示例,同时覆盖了系统存储过程的使用,以及如何修改、删除存储过程等内容。
--存储过程(PROCEDURE)
/*
创建存储过程,存储过程是保存起来的可以接受
和返回用户提供的参数的 Transact-SQL 语句的集合。
可以创建一个过程供永久使用,或在一个会话中临时使用(
局部临时过程),或在所有会话中临时使用(全局临时过程)。
也可以创建在SQL启动时自动运行的存储过程。

存储过程的优级点:
1.允许模块化设计 单独修改(独立的),任意次调用
2.允许更快执行 存储过程比批代码执行速度快,存储过程在创建时
DBMS对其进行了分析、优化。首次执行后,在内存中
会存在,因此调用速度快
T-SQL语句每次都要从客户端重复发送,SQL每次执行
都要进行一次编译,优化。
3减少网络流量 数百行代码由一条代码(执行存储过程的代码)实现
不需要在网络中发送数百行代码
4安全 SQL事件探查器能跟踪到客户端发送到SQL中的T-SQL语句
如果使用存储过程,则只能探查到过程名。


存储过程类型:

1.系统存储过程
sp_databases 列出服务器上的所有数据库
sp_server_info 列出服务器信息,如字符集、版本和排列顺序
sp_stored_procedures 列出当前环境中的所有存储过程
sp_tables 列出当前环境中所有可以查询的对象
sp_start_job 立即启动自动化任务
sp_stop_job 停止正在运行的自动化任务
sp_password 添加或修改登录账户的密码
sp_configure 修改SQL 全局配置选项。
如果使用时不带选项,则显示当前服务器设置
sp_help 显示任意数据库对象的信息
sp_helptext 显示规则、默认值、未加密的存储过程、用户定义
的函数、触发器或视图的实际文本
*/
--2.用户自定义的存储过程
CREATE PROC procedure_name
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]

AS sql_statement

@parameter

过程中的参数。在 CREATE PROCEDURE 语句中可以声明一个或多个参数。
用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2.100 个参数。

使用 @ 符号作为第一个字符来指定参数名称。
参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;
相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,
而不能用于代替表名、列名或其它数据库对象的名称。

VARYING

指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。
仅适用于游标参数。

default

参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。
默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,
那么默认值中可以包含通配符(%、_、[] 和 [^])。

OUTPUT

表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。
使用 OUTPUT 参数可将信息返回给调用过程。Text、ntext 和 image
参数可用作 OUTPUT 参数。使用 OUTPUT 关键字的输出参数可以是游标占位符。


-- A、不带参数的存储过程
create procedure proc_sales
as
select * from sales
exec proc_sales

-- B、带参数的存储过程
create proc proc_titles
@a varchar(20),@b int =9.99 --@b为带默认值的参数
as
select * from titles
where type=@a and price>@b
exec proc_titles @a='business'

-- C、有返回值的存储过程
create proc proc_titles_2
@a varchar(20),@b int output
as
select @b=sum(price)
from titles
where type=@a

declare @h int
exec proc_titles_2 'business',@h output --注意变量@h必须为output才可以得到存储过程的输出,否则@h的值为NULL
select @h

create proc proc_employee
@fname varchar(20)=null
as
if @fname is null
begin
print '请输入作者名'
return(1)
end
else
begin
if(select count(*) from employee where fname=@fname)=0
return(0)
else
return(2)
end
declare @h int
exec @h= proc_employee 'aa'
if @h=0
begin
print '没有该作者的相关信息'
end

select * from employee


create procedure p_title
@cnt int output, --输出参数
@cnt2 int output,
@type varchar(20)='business' --输入参数
as
select *
from titles
where type = @type
select @cnt=count(*)
from titles
where type = @type
select @cnt2=count(*)
from titles
if @cnt = 0
return 0
else
return 1

go
set nocount on

declare @mycnt int,@mycnt2 int,@retVal int
set @mycnt = 0
exec @retVal=p_title @mycnt output,@mycnt2 output,'aa'
if @retVal=0
print '没有你要查找的书籍'
else
print '你查找到: '+
convert(varchar(20),@mycnt) + ' 本书籍 '
+convert(varchar(20),@mycnt2)


--重新编译存储过程
--1>使用系统提供的存储过程 sp_recompile
--强制在下次执行proc时对其进行重新编译
/*
语法:
sp_recompile [ @objname = ] 'object'
参数:
[@objname =] 'object'
是当前数据库中的存储过程、触发器、
表或视图的限定的或非限定的名称。
object 是 nvarchar(776) 类型,无默认值。
如果 object 是存储过程或触发器的名称,
那么该存储过程或触发器将在下次运行时重新编译。
如果 object 是表或视图的名称,
那么所有引用该表或视图的存储过程都将在下次运行时重新编译
*/
--2>在创建时设置
create proc proc_name
with recompile
as
sql_statement
--3>在执行时候重新编译
exec proc_name with recompile
/*
为什么要重新编译存储过程?
1>在首次执行存储过程时,系统会自优化
2>当存储过程使用的表修改后,也会优化
3>当表中添加新索引后,只有重启SQL才会优化,如果不重启,则需手动优化
4>只有优化后,用户对表的索引的修改才能反映出来
*/

--修改存储过程
--alter proc proc_name
--.........
--和创建存储过程的语法相似

--删除存储过程
--drop proc proc_name


--处理错误信息 raiserror
/*
在存储过中,使用raiserror显示用户定义的错误信息
1>临时的信息
2>只能显示给用户
3>记错错误,指定严重级别

RAISERROR ( { msg_id | msg_str } { , severity , state }
[ , argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]

参数

msg_id: 在sysmessages系统表中指定的用户定义错误信息
msg_str: 用户定义的特定信息,最长255个字符
severity:与特定信息关联,由用户定义严重级别
0 -18 用户可使用级别
19-25 sysadmin成员预留的,并需要指定with log选项
20-25 致命错误
state: 错误状态 1-127之间
option: 是否将错误记录到服务器错误日志中
*/
源码来自:https://pan.quark.cn/s/a4b39357ea24 ### 操作指南:洗衣机使用方法详解#### 1. 启动与水量设定- **使用方法**:使用者必须首先按下洗衣设备上的“启动”按键,同时依据衣物数量设定相应的“水量选择”旋钮(高、中或低水量)。这一步骤是洗衣机运行程序的开端。- **运作机制**:一旦“启动”按键被触发,洗衣设备内部的控制系统便会启动,通过感应器识别水量选择旋钮的位置,进而确定所需的水量高度。- **技术执行**:在当代洗衣设备中,这一流程一般由微处理器掌管,借助电磁阀调控进水量,直至达到指定的高度。#### 2. 进水过程- **使用说明**:启动后,洗衣设备开始进水,直至达到所选的水位(高、中或低)。- **技术参数**:水量的监测通常采用浮子式水量控制器或压力感应器来实现。当水位达到预定值时,进水阀会自动关闭,停止进水。- **使用提醒**:务必确保水龙头已开启,并检查水管连接是否牢固,以防止漏水。#### 3. 清洗过程- **使用步骤**:2秒后,洗衣设备进入清洗环节。在此期间,滚筒会执行一系列正转和反转的动作: - 正转25秒 - 暂停3秒 - 反转25秒 - 再次暂停3秒- **重复次数**:这一系列动作将重复执行5次,总耗时为280秒。- **技术关键**:清洗环节通过电机驱动滚筒旋转,利用水流冲击力和洗衣液的化学效果,清除衣物上的污垢。#### 4. 排水与甩干- **使用步骤**:清洗结束后,洗衣设备会自动进行排水,将污水排出,然后进入甩干阶段,甩干时间为30秒。- **技术应用**:排水是通过泵将水抽出洗衣设备;甩干则是通过高速旋转滚筒,利用离心力去除衣物上的水分。- **使用提醒**:...
代码下载地址: https://pan.quark.cn/s/c289368a8f5c 在安卓应用开发领域,构建一个高效且用户友好的聊天系统是一项核心任务。 为了协助开发者们迅速达成这一目标,本文将分析几种常见的安卓聊天框架,并深入说明它们的功能特性、应用方法及主要优势。 1. **环信(Easemob)** 环信是一个专为移动应用打造的即时通讯软件开发套件,涵盖了文本、图片、语音、视频等多种消息形式。 通过整合环信SDK,开发者能够迅速构建自身的聊天平台。 环信支持消息内容的个性化定制,能够应对各种复杂的应用场景,并提供多样的API接口供开发者使用。 2. **融云(RongCloud)** 融云作为国内领先的IM云服务企业,提供了全面的聊天解决方案,包括一对一交流、多人群聊、聊天空间等。 融云的突出之处在于其稳定运行和高并发处理性能,以及功能完备的后台管理工具,便于开发者执行用户管理、消息发布等操作。 再者,融云支持多种消息格式,如位置信息、文件传输、表情符号等,显著增强了用户聊天体验。 3. **Firebase Cloud Messaging(FCM)** FCM由Google提供的云端消息传递服务,可达成安卓设备与服务器之间的即时数据交换。 虽然FCM主要应用于消息推送,但配合Firebase Realtime Database或Firestore数据库,开发者可以开发基础的聊天软件。 FCM的显著优势在于其全球性的推送网络,保障了消息能够及时且精确地传输至用户。 4. **JMessage(极光推送)** 极光推送是一款提供消息发布服务的软件开发工具包,同时具备基础的即时通讯能力。 除了常规的文字、图片信息外,极光推送还支持个性化消息,使得开发者能够实现更为复杂的聊天功能。 此...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值