存储过程   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. java中生成验证码,以及验证码的使用

    java中生成验证码,以及验证码的使用: 1:验证码生成工具类: import java.awt.Color; import java.awt.Font; import java.awt.Graphi ...

  2. Bootstrap --对话框及提示框的处理和优化

    源模态框使用:http://www.runoob.com/bootstrap/bootstrap-modal-plugin.html <!-- 按钮触发模态框 --> <button ...

  3. JavaScript之从浏览器一键获取教务处个人课程信息【插件】

    由于博主的个人网站(:http://www.johnnyzen.cn/),每学期都需要更新呈现课程的静态信息,由于课程量多,而且手动爬取很冗杂,特别想自动化实现.这不,今天终于有点时间了,把之前写no ...

  4. 寻路优化(一)——二维地图上A*启发函数的设计探索

    工作中需要优化A*算法,研究了一天,最后取得了不错的效果.看网上的朋友还没有相关的研究,特此记录一下.有错误欢迎大家批评指正.如需转载请注明出处,http://www.cnblogs.com/Leon ...

  5. php 无法正确获取系统当前时间的解决办法

    今天捣鼓一个统计系统时让用户自动录入用户信息,后台使用PHP的date()函数来获取系统时间,发现时间跟当前时间对不上,后来是因为PHP默认的时区是UTC,应该将其时区设置为北京时间. 方法一:修改p ...

  6. 运维数据库平台~inception测试脚本

    一 简介:今天咱们来聊聊inception的测试脚本 二 范例: #!/usr/bin/python import MySQLdb sql='/*--user=;--password=;--host= ...

  7. GCC的符号可见性——解决多个库同名符号冲突问题

    引用自:https://github.com/wwbmmm/blog/wiki/gcc_visibility 问题 最近项目遇到一些问题,场景如下 主程序依赖了两个库libA的funcA函数和libB ...

  8. Linux内核驱动--硬件访问I/O【原创】

    寄存器与内存 寄存器与内存的区别在哪里呢? 寄存器和RAM的主要不同在于寄存器操作有副作用(side effect或边际效果): 读取某个地址时可能导致该地址内容发生变化,比如很多设备的中断状态寄存器 ...

  9. eclipse删除多余的工作空间

    window->preferences->startup and shutdown->workspaces如图:

  10. Ex 6_1 和最大的相连子序列..._第五次作业

    设数值列表a0,a1 . . . an存放在数组arr[0. . .n]中. sum[0],sum[1],sum[2] . . . .sum[n]为以该下标为终点元素的连续子序列的和的最大值,则sum ...