SQL存储过程使用参考代码
存储过程 use EBuy go --常用的系统存储过程 sp_addmessage --将新的用户定义错误消息存储在SQL Server数据库实例中 sp_helptext --显示用户定义的规则、默认值、存储过程、函数、视图等对象的实际文本 sp_xml_preparedocument --读取作为输入提供的XML文本,然后使用MSXML分析器对其进行分析,并提供分析后的文档供使用 sp_helpdb 'EBuy' --查看指定数据库的信息 sp_databases --列出服务器上的所有数据库 sp_server_info --列出服务器信息,如字符集、版本和排列顺序等 sp_stored_procedures --列出当前环境中的所有存储过程 sp_configure --修改SQL Server全局配置选项 sp_adduser --向当前数据库中添加新的用户 sp_addrole --在当前数据库中创建新的数据库角色 --用户自定义存储过程 create table users( id int primary key, name varchar(20) not null, pwd varchar(20) not null ) insert into users values(1,'zhangsan','zhang01') go create procedure addUser --创建存储过程(procedure可以简写为proc) @id int, @name varchar(20), @pwd varchar(20) as begin insert into users(id,name,pwd) values(@id,@name,@pwd) end exec addUser 2,'lisi','lisi01' --执行存储过程(实参传递的顺序和所对应的形参顺序必须一致) exec addUser @name='wangwu',@pwd='wang01',@id=3 --执行存储过程,这种方式顺序可以不一致 declare @v_id int,@v_name varchar(20),@v_pwd varchar(20) set @v_id=5 set @v_name='zhaoliu2' set @v_pwd='zhao022' exec addUser @v_id,@v_name,@v_pwd --执行存储过程,调用存储过程并传递变量参数(顺序必须与定义变量的顺序一致) select * from users
2 --制定默认值 use Study if exists(select * from sys.all_objects where name='increaseCredit' and type='P') drop procedure increaseCredit go create proc increaseCredit @stuName char(6)=null, --指定null为默认值 @credit int = 3 --制定整数值3为默认值 as begin if @stuName=null begin print '没有指定学号,更新无法完成' return end update student set credit=credit+@credit where stuName=@stuName end exec increaseCredit '程琳',5 --提供所有参数 exec increaseCredit '程琳' --提供部分参数,则第二个参数使用默认值3 --指定参数方向 if exists(select name from sys.all_objects where name='avgCreditForMajor' and type='P') drop proc avgCreditForMajor create proc avgCreditForMajor @majorId int, --输入参数 @avg decimal(4,1) output --输出参数 as select @avg=avg(credit) from student where majorId=@majorId go declare @avgCredit decimal(4,1) exec avgCreditForMajor 1,@avgCredit output --将输出的返回值保存在@avgCredit变量中,注意输出参数也必须指定output关键字 print('专业平均学分:'+cast(@avgCredit as varchar)) --显示储存过程的返回值 go --使用return语句 use EBuy if exists(select name from sys.all_objects where name='checkCity' and type='P') drop proc avgCreditForMajor create proc checkCity @cusid varchar(20) as if(select address from customer where cusId=@cusid) like '%上海%' return 1 else if(select address from customer where cusId=@cusid) not like '%上海%'
3 return 2 else return 3 declare @ret_status int exec @ret_status=checkCity '1001' --客户住在上海 select @ret_status as '返回状态' declare @ret_status int exec @ret_status=checkCity '1004' --客户不住在上海 select @ret_status as '返回状态' declare @ret_status int exec @ret_status=checkCity '13204' --客户不存在的情况 select @ret_status as '返回状态' --事物和错误处理 create proc procTest as declare @num int select @num=9 begin try while @num>0 begin print convert(varchar,sqrt(@num)) select @num=@num-1 if @num=5 raiserror('基数已小于6',16,1) end end try begin catch print '放生错误的是:'+convert(varchar,error_procedure()) print '错误编号:'+convert(varchar,error_number()) print '错误描述:'+convert(varchar,error_message()) print '错误级别:'+convert(varchar,error_severity()) print '错误位于:'+convert(varchar,error_line()) print '错误状态:'+convert(varchar,error_state()) end catch go exec procTest --执行存储过程 --存储过程中的事务 use EBuy create table account( accId int, type varchar(10), balance decimal(10,2) )
4 insert into account values(33,'savings',3000) insert into account values(33,'checking',1500) if exists(select name from sys.all_objects where name='savingsToChecking' and type='P') drop proc savingsToChecking go create proc savingsToChecking @accid int, @num decimal(10,2) as declare @bal decimal(10,2) begin try select @bal=balance from account where accId=@accid and type='savings' if @num>@bal return 1 begin tran update account set balance=balance-@num where accId=@accid and type='savings' update account set balance=balance+@num where accId=@accid and type='checking' commit tran return 0 end try begin catch rollback tran return 2 end catch go declare @retCode int begin exec @retCode=savingsToChecking 33,1500 if @retCode=0 print '转账成功' else if @retCode=1 print '转账金额大于账面余额,转账失败' else print '数据库发生错误,转账失败' end --存储过程的查看、修改和删除 sp_helptext 'savingsToChecking' --查看存储过程 alter proc savingsToChecking @accid int, --此处可以修改参数的定义 @num decimal(10,2) drop proc savingsToChecking --删除存储过程 --重新编译存储过程 --1
5 sp_recompile savingsToChecking --2 create proc savingsToChecking @accid int, @num decimal(10,2) with recompile --创建存储过程的时候指定 as ...... --3 exec savingsToChecking 33,1500 with recompile
SQL存储过程使用参考代码的更多相关文章
- PL/SQL存储过程编程
PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...
- 《软件测试自动化之道》读书笔记 之 SQL 存储过程测试
<软件测试自动化之道>读书笔记 之 SQL 存储过程测试 2014-09-28 待测程序测试程序 创建测试用例以及测试结果存储 执行T-SQL脚本 使用BCP工具导入测试用例数据 ...
- (转)ASP与sql存储过程
本文转载自:http://www.cnblogs.com/Spring/archive/2006/10/18/532817.aspx ASP与存储过程(Stored Procedures)的文章不少, ...
- sql存储过程中循环批量插入
前几天有一个需求很头痛,部门是有上下级关系的,在给部门的经理赋予角色和权限的时候,通常我们都会认为假如经理A的部门是1,那么我给了他部门1 的管理权限,那么1的下级部门101,102,103 &quo ...
- sql存储过程异常捕获并输出例子还有不输出过程里面判断异常 例子
编程的异常处理很重要,当然Sql语句中存储过程的异常处理也很重要,明确的异常提示能够快速的找到问题的根源,节省很多时间. 下面,我就以一个插入数据为例来说明Sql Server中的存储过程怎么捕获异常 ...
- SQL存储过程概念剖析
一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...
- 使用SQL存储过程有什么好处 用视图有什么好处
随便胡乱说几点,大家补充一下.1.预编译,已优化,效率较高.避免了SQL语句在网络中传输然后再解释的低效率.2.如果公司有专门的DBA,写存储过程可以他来做,程序员只要按他提供的接口调用就好了.这样分 ...
- 一个SQL存储过程面试题(比较简单)
三个月前刚毕业的时候,听到存储过程就头疼. 写一个SQL存储过程,建立一个表USER 字段是姓名,年龄,职位,权限,然后向里面插入6条数据,然后查询出年龄大于18的所有信息. 下面是答案: 复制代码 ...
- 关于MVC工厂模式的增删改查sql存储过程
这里MVC中用到了反射,工厂,泛型,接口 在搭建框架的时候,除了MVC的三层以外,还有泛型的接口层和工厂层 下面是dal层调用sql存储过程,增删改查,dal层继承了接口层,实现了接口层里面的方法 1 ...
随机推荐
- SLT 优先队列 哈弗曼树最小带权路径
与普通的队列不同,普通的队列是先进先出的,而优先队列出队的顺序不是先进先出,而是大(或者小)元素先出队,需要#include <queue> 成员函数 成员函数 作用 empty() 判断 ...
- 无线DOS攻击
1.无线连接状态 IEEE 802.11定义了一种客户端状态机制,用于跟踪工作站身份验证和关联状态.无线客户端和AP基于IEEE标准实现这种状态机制.成功关联的客户站停留在状态3,才能进行无线通信.处 ...
- sql 行变列
select * from market//查看原来所有数据 //第一种方式 select max(case area when '南京' then num else 0 end) 南京, max(c ...
- More Effective C++ 条款0,1
More Effective C++ 条款0,1 条款0 关于编译器 不同的编译器支持C++的特性能力不同.有些编译器不支持bool类型,此时可用 enum bool{false, true};枚举类 ...
- python之random模块分析(一)
random是python产生伪随机数的模块,随机种子默认为系统时钟.下面分析模块中的方法: 1.random.randint(start,stop): 这是一个产生整数随机数的函数,参数start代 ...
- Difference between plt.draw() and plt.show() in matplotlib
Difference between plt.draw() and plt.show() in matplotlib down voteaccepted plt.show() will display ...
- Centos6.5使用yum安装svn
1.测试环境 centos5.5 2.安装svn yum -y install subversion //测试SVN是否安装成功,执行:svnserve --version 3.配置 mkdir /w ...
- ASP.NET Core Identity 实战(3)认证过程
如果你没接触过旧版Asp.Net Mvc中的 Authorize 或者 Cookie登陆,那么你一定会疑惑 认证这个名词,这太正式了,这到底代表这什么? 获取资源之前得先过两道关卡Authentica ...
- saltstack自动化运维系列①之saltstack服务安装及简单使用
Saltstack介绍 Salt三种运行方式 1.local本地运行2.Master/Minion3.Salt ssh Salt的三大功能 a.远程执行b.配置管理(状态管理)c.云管理:阿里云,aw ...
- Ex 5_21 无向图G=(V,E)的反馈边集..._第九次作业
根据题意,求的是最大生成树.利用Kruskal算法,对边进行从大到小的顺序进行排序,然后再依次取出边加入结果集中.假设图有n个顶点,那么,当结果集中有n-1条边时,剩下的边的集合即为反馈边集. pac ...