存储过程   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. centos 重启日志服务

    因为/var/log/message日志太多了,遂手贱删掉了这个文件,新建messages,发现没有日志写入 正确清空日志的方法 cat /dev/null > /var/log/boot.lo ...

  2. Spring 学习03

    一.上节内容回顾 1 注解ioc操作 (1)使用注解创建对象 - 四个注解 (2)使用注解注入属性 - 两个注解 2 aop (1)aop原理 (2)aop术语 - 切入点 - 增强 - 切面 3 s ...

  3. WebStrom设置默认浏览器

  4. IntelliJ IDEA AndroidStudio SVN无法使用

    1.Cann't Run Program "SVN" 把勾都去掉,结果没有任何反应.2.重新安装TotoriseSVN,设置Svn.exe路径,主要不要勾选Enable Inter ...

  5. Jsp (Java Server Pages)相关知识九大内置对象和四大作用域

    一.初识JSP Jsp页面的组成:静态内容.指令.表达式.小脚本.声明.标准动作.注释等元素构成 Url:统一资源定位符 Url组成:协议.主机名(包括端口号).路径 1.注释的方式: 1.HTML注 ...

  6. Scapy Fuzz实现——S7协议从建连到“正常交流“(一)

    转载:安全客 酝酿了“三秒钟“,准备理清逻辑写写我学习的心得,自认为和Siemens S7协议有过一段时间浅浅的“交流”,所以这过程中涉及到了自己整理的自认为有用的东西,涉及工具.脚本这般,发出来让大 ...

  7. C++中模板的使用

    为什么使用模板: C++重载(overloading),重载函数一般含有不同的参数个数或不同的参数类型.如果使用MAX函数对不同类型的求最大值,就要定义不同的重载函数: int max(int x,i ...

  8. Postfix 邮件服务 - DNS服务

    DNS 服务 (系统需要配置静态 IP 地址) yum install bing* -y 一.配置 NDS 域名解析: 直接添加以下内容: [root@mail ~]# cat /etc/named. ...

  9. Synchronized和lock的区别和用法

    一.synchronized和lock的用法区别 (1)synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要 ...

  10. 设置PHPStorm 注释

    /** * Desc: xxx#if (${NAME}) * Class: ${NAME}#end#if (${NAMESPACE}) * Package: ${NAMESPACE}#end * Us ...