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 ...
随机推荐
- es6三个点运算符
...扩展运算符:可以将数组或对象里面的值展开 const b = {a:1,b:2} console.log({...b,c:3}); //{a:1,b:2,c:3} 一定程度上可以替代apply方 ...
- Mac下IntelliJ IDEA快捷键大全
Mac键盘符号和修饰键说明⌘ Command⇧ Shift⌥ Option⌃ Control↩︎ Return/Enter⌫ Delete⌦ 向前删除键(Fn+Delete)↑ 上箭头↓ 下箭头← 左 ...
- 2017CCPC秦皇岛 C题Crusaders Quest&&ZOJ3983【模拟+STL】
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3983 题意: 给定9个血槽,有三种物品,每次可以把连续相同的物品抵消 ...
- HDU 1162 Eddy's picture (最小生成树 prim)
题目链接 Problem Description Eddy begins to like painting pictures recently ,he is sure of himself to be ...
- transform 图标旋转,IE8、IE7不兼容
要将图标旋转,只需使用transform的rotate以及transition即可完成旋转的动画效果.ease 规定慢速开始,然后变快,然后慢速结束的过渡效果; ease-in 规定以慢速开始的过 ...
- mac系统在配置navicat时连接数据的时候提示can't connect to mysql server on '127.0.0.1'
新建数据库连接的时候,将默认的端口号更改掉,改为3307,即可解决这个问题. 具体是为什么我也不清楚,我自己想的一个可能就是mac电脑 上的某个程序可能已经占用了3306那个默认的端口,因 ...
- 使用python中的matplotlib 画图,show后关闭窗口,继续运行命令
使用python中的matplotlib 画图,show后关闭窗口,继续运行命令 在用python中的matplotlib 画图时,show()函数总是要放在最后,且它阻止命令继续往下运行,直到1.0 ...
- 通达OA批量处理没有结束但前台显示已经结束的流程
问题描述: 通达OA系统出现大量流程没有结束,系统显示结束的问题 通过查询操作系统日志,数据库日志,包括程序日志没有发现异常,通过观察发现大量的流程结束时间都是在2016-02-16 17:32:XX ...
- ajax使用异步问题
使用$.ajax(...)中 async:默认为true,表示异步,具体描述,请查看别的文档 var formData = new FormData($("#dataForm")[ ...
- spring事物的传播行为及隔离
关于@Transactional注解: 添加事务注解1.使用 propagation 指定事务的传播行为, 即当前的事务方法被另外一个事务方法调用时如何使用事务, 默认取值为 REQUIRED, 即使 ...