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 ...
随机推荐
- Photoshop的辅助线
其它功能: 1.在拖动参考线时,按下Alt键能在垂直和水平参考线之间进行切换.按下Alt键,点击当前垂直的水平线就能够将其改变为一条水平的参考线,反之亦然. 2.按下Shift键拖动参考线能够强制它们 ...
- OpenCV中MAT中数据类型的设置(转)
前言 opencv中很多数据结构为了达到內存使用的最优化,通常都会用它最小上限的空间来分配变量,有的数据结构也会因为图像文件格式的关系而给予适当的变量,因此需要知道它们声明的空间大小来配置适当的变量. ...
- Linux之Ubuntu下如何查看已安装的软件/库文件【摘抄】
本文属于实用性质,且属于摘抄别处,出自:[Ubuntu 下如何查看已安装的软件](http://blog.csdn.net/m1205979825/article/details/40855583) ...
- POJ3635 Full Tank?【Dijkstra+DP】
题意: n个城市之间有m条双向路.每条路要耗费一定的油量.每个城市的油价是固定并且已经给出的.有q个询问,表示从城市s走到e,油箱的容量为c,求最便宜的方案. 思路: 用Dijkstra+Heap即可 ...
- PHP - CentOS下开发运行环境搭建(Apache+PHP+MySQL+FTP)
本文介绍如何在 Linux下搭建一个 PHP 环境.其中 Linux 系统使用是 CentOS 7.3,部署在阿里云服务器上. 1,连接登录服务器 拿到服务器的 ip.初始密码以后.我们先通过远程 ...
- Web项目Shiro总结及源码(十六)
shiro过虑器 过滤器简称 对应的java类 anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shir ...
- Dubbo本地存根
在远程调用服务提供者的实现之前,如果需要做一些参数验证.缓存.判断.小功能等等,满足要求再调用服务提供者的远程服务,则我们可以通过编写一个本地存根来实现这种功能. (1).在公共项目中或服务消费者项目 ...
- JavaScript从初见到热恋之深度讨论JavaScript中的面向对象。
JavaScript中的面向对象.面向对象的三个基本特征:封装.继承.多态. 1.封装 js的封装如下 定义Person类 function Person(name,age,sex) { this.n ...
- 算法时间复杂度和NP问题简介
这里主要简单说一下算法的时间复杂度和NP问题简介,毕竟分析算法的时间复杂度上界有助于分析算法的好坏,分析算法好坏也有助于分析是否还有更好的算法: 一.时间复杂度: 一般关心的还有递归问题中的时间复杂度 ...
- 理解 Linux 配置文件【转】
转自:http://www.ibm.com/developerworks/cn/linux/management/configuration/ 分类和使用 本文说明了 Linux 系统的配置文件,在多 ...