存储过程   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存储过程使用参考代码的更多相关文章

  1. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

  2. 《软件测试自动化之道》读书笔记 之 SQL 存储过程测试

    <软件测试自动化之道>读书笔记 之 SQL 存储过程测试 2014-09-28 待测程序测试程序   创建测试用例以及测试结果存储  执行T-SQL脚本  使用BCP工具导入测试用例数据  ...

  3. (转)ASP与sql存储过程

    本文转载自:http://www.cnblogs.com/Spring/archive/2006/10/18/532817.aspx ASP与存储过程(Stored Procedures)的文章不少, ...

  4. sql存储过程中循环批量插入

    前几天有一个需求很头痛,部门是有上下级关系的,在给部门的经理赋予角色和权限的时候,通常我们都会认为假如经理A的部门是1,那么我给了他部门1 的管理权限,那么1的下级部门101,102,103 &quo ...

  5. sql存储过程异常捕获并输出例子还有不输出过程里面判断异常 例子

    编程的异常处理很重要,当然Sql语句中存储过程的异常处理也很重要,明确的异常提示能够快速的找到问题的根源,节省很多时间. 下面,我就以一个插入数据为例来说明Sql Server中的存储过程怎么捕获异常 ...

  6. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

  7. 使用SQL存储过程有什么好处 用视图有什么好处

    随便胡乱说几点,大家补充一下.1.预编译,已优化,效率较高.避免了SQL语句在网络中传输然后再解释的低效率.2.如果公司有专门的DBA,写存储过程可以他来做,程序员只要按他提供的接口调用就好了.这样分 ...

  8. 一个SQL存储过程面试题(比较简单)

    三个月前刚毕业的时候,听到存储过程就头疼. 写一个SQL存储过程,建立一个表USER 字段是姓名,年龄,职位,权限,然后向里面插入6条数据,然后查询出年龄大于18的所有信息. 下面是答案: 复制代码 ...

  9. 关于MVC工厂模式的增删改查sql存储过程

    这里MVC中用到了反射,工厂,泛型,接口 在搭建框架的时候,除了MVC的三层以外,还有泛型的接口层和工厂层 下面是dal层调用sql存储过程,增删改查,dal层继承了接口层,实现了接口层里面的方法 1 ...

随机推荐

  1. 使用JS监听键盘按下事件(keydown event)

    1.监听全局键盘按下事件,例如监听全局回车事件 1 $(document).keydown(function(event){ 2 if(event.keyCode == 13){ 3 alert('你 ...

  2. sql 行变列

    select * from market//查看原来所有数据 //第一种方式 select max(case area when '南京' then num else 0 end) 南京, max(c ...

  3. luogu P4568 [JLOI2011]飞行路线

    传送门 看到免费次数\(k\)最多只有10,可以考虑构建\(k+1\)层的分层图,即每一层正常连边,上下两层对应点连边权为0的单向边,最后对所有层里面的\(di_t\)取\(\max\)救星了 #in ...

  4. luogu P1776 宝物筛选_NOI导刊2010提高(02)

    Sto flashhu orz flash太强啦 多重背包裸题(逃 使用压维大法,\(f_i\)为总重量为\(i\)时的答案 对于每种物品,记\(w\)为单个的重量,\(v\)为单个的价值,\(m\) ...

  5. kan

    http://blog.csdn.net/yahohi/article/details/7427724 http://duanhengbin.iteye.com/blog/1706635 http:/ ...

  6. Python提示AttributeError 或者DeprecationWarning: This module was deprecated解决方法

    Python提示AttributeError 或者DeprecationWarning: This module was deprecated解决方法 在使用Python的sklearn库时,发现sk ...

  7. yum和rpm的区别

    rpm是由红帽公司开发的软件包管理方式,使用rpm我们可以方便的进行软件的安装.查询.卸载.升级等工作.但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时.Yum(全称为 Y ...

  8. /etc/profile 路径出错后相关的命令失效解决方式

    关于 Linux 的配置文件 /etc/profile 路径出错后相关的命令失效解决方式(如:ls,vi不能用) 今天学习LINUX 下配置jdk 和安装tomcat 通过VI编辑/etc/profi ...

  9. win10 安装硕正

    提示权限不够,解决方法:根据提示路径手动在路径下建立文件夹

  10. 在docker中部署centos7镜像

    本篇文章参考自: https://www.cnblogs.com/linjj/p/5606911.html https://blog.csdn.net/u012767761/article/detai ...