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 ...
随机推荐
- HTML5的 input:file上传 以及 类型控制
以HTML5的文件上传API 如下demo代码在.html文件打开即可: !DOCTYPE html> <html lang="zh_cn"> <head& ...
- vue自学入门-3(vue第一个例子)
1.安装后打开8080端口,http://localhost:8080/#/ 2.进入项目目录 2.默认路由 3.修改文件index.js 将Import HelloWorld一句修改为 import ...
- C# 面向对象的new关键字的使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- setTimeout设置不起作用
setTimeout立刻调用了 a()方法而不是xx秒以后,是因为调用方法时候没有加双引号. 正确做法:setTimeout(" a() ",5000): 调用 a() 方法时候要 ...
- luogu P2596 [ZJOI2006]书架
传送门 感觉要死在\(Splay\)里了 orz 这题用\(Splay\)维护这个序列,其中的第\(k\)大点代表这个序列的第\(k\)个数 第一个操作,先把那个数所在的点旋到根,然后把整个根的左子树 ...
- 2017CCPC秦皇岛 E题String of CCPC&&ZOJ3985【模拟】
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3985 题意: 给定一个字符串,由c和p组成,可以添加c或者p. 串中出现一 ...
- Two Sum I & II & III & IV
Two Sum I Given an array of integers, find two numbers such that they add up to a specific target nu ...
- vsftpd控制用户禁止访问上级目录 只能访问自己目录
涉及文件: vsftpd.conf chroot_list_file=/etc/vsftpd.chroot_list 如果设置为 chroot_local_user=YES chroot_list_e ...
- Linux的capability深入分析(2)【转】
转自:https://blog.csdn.net/wangpengqi/article/details/9821231 rpm -ql libcap-2.16-5.2.el6.i686 /lib/l ...
- 002_mtr_a network diagnostic tool
一. mtr combines the functionality of the traceroute and ping programs in a single network diagnostic ...