1. 存储过程:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。功能强大,限制少
  2.  
  3. 如何调用存储过程
  1. --无参数的存储过程
  2. exec sp_databases;
  3.  
  4. --有参数的
  5. exec sp_helpdb TestDataBase;
  6.  
  7. exec sp_renamedb TestDataBase, TDB;
  8. -- 当参数较多的时候,建议使用显示赋值
  9. exec sp_renamedb @newname='Testdatabase', @dbname='TDB';
  1.  

创建,修改无参存储过程:

创建:

  1. -- 一个无参的查询存储过程
  2. /*
  3. create proc usp_存储过程名
  4. as
  5. 查询步骤
  6. */
  7. go
  8. create proc usp_spFenYe
  9. as
  10. select * from dbo.fn_fenye(1,10);--一个分页的fn,获取第一页的数据,10条/页
  11. go

修改已有的存储过程usp_Test,以实现转账为例子(开启事务),

  1. alter proc usp_Test
  2. as
  3. begin
  4. begin transaction
  5. declare @myError int;
  6. set @myError = 0;
  7. update bank set balance=balance + 900 where cid='';
  8. set @myError += @@ERROR;
  9. update bank set balance=balance - 900 where cid='';
  10. set @myError += @@ERROR;
  11. if(@myError > 0)
  12. begin
  13. rollback transaction;
  14. end
  15. else
  16. begin
  17. commit transaction;
  18. end
  19. end;
  20. go
  21.  
  22. select * from bank;
  23.  
  24. exec usp_Test;

建个有参数的存储过程,继续转账:

  1. create proc usp_ZZ2
  2. @from char(4), --从那里转
  3. @to char(4), --转到哪里
  4. @money money --金额
  5. as
  6. begin
  7. begin transaction
  8. declare @myError int;
  9. set @myError = 0;
  10. update bank set balance=balance - @money where cid=@from;
  11. set @myError += @@ERROR;
  12. update bank set balance=balance + @money where cid=@to;
  13. set @myError += @@ERROR;
  14. -- 什么时候提交,什么时候回滚?
  15. if(@myError > 0)
  16. begin
  17. rollback transaction;
  18. end
  19. else
  20. begin
  21. commit transaction;
  22. end
  23. end
  24. go
  25.  
  26. select * from bank;
  27.  
  28. exec usp_ZZ2 '', '', 90;
  29.  
  30. exec usp_ZZ2 @money=500, @from = '', @to = '';
  31.  
  32. exec usp_ZZ2 '', '', 410;
  33.  
  34. go

依然在转账

  1. create proc usp_ZZ3
  2. @from char(4),
  3. @to char(4),
  4. @money money
  5. as
  6. begin
  7. begin transaction
  8. declare @last money;
  9. set @last = (select balance from bank where cId=@from);
  10. if(@last - 10 >= @money)
  11. -- bank表里有一个检查约束,余额要大于等于10
  12. begin
  13. update bank set balance=balance - @money where cid=@from;
  14. update bank set balance=balance + @money where cid=@to;
  15. commit;
  16. select '转账成功';
  17. end
  18. else
  19. begin
  20. rollback;
  21. select '转账失败';
  22. end
  23. end
  24. go
  25.  
  26. exec usp_ZZ3 '', '', 900;
  27.  
  28. select * from bank;
  1.  给存储过程的参数设置默认值,示例:
  1. create proc usp_testDefault
  2. @str nvarchar(50) = '默认值'
  3. as
  4. select @str;
  5.  
  6. exec usp_testDefault '我是传进来的参数啊';
  1.  

output参数怎么用,还在转(转账),修改存储过程zz4;

  1. -- 带有output参数的存储过程
  2.  
  3. go
  4.  
  5. create proc usp_ZZ4
  6. @from char(4),
  7. @to char(4),
  8. @money money,
  9. @state int output
  10. -- 这个state表示需要在存储过程中赋值,外面使用的参数
  11. as
  12. begin
  13. begin transaction
  14. declare @last money;
  15. set @last = (select balance from bank where cId=@from);
  16. if(@last - 10 >= @money)
  17.  
  18. begin
  19. update bank set balance=balance - @money where cid=@from;
  20. update bank set balance=balance + @money where cid=@to;
  21. commit;
  22. set @state = 1;--1表示转账成功
  23. end
  24. else
  25. begin
  26. rollback;
  27. set @state = 0;--转账失败
  28. end
  29. end
  30. go
  31. ----------------
  32. -- 使用
  33. declare @State int;
  34. exec usp_ZZ4 '', '', 1000, @State output;
  35. exec usp_ZZ4 @from = '', @to = '', @money = -501, @state = @State output;
  36.  
  37. select @State;
  1.  

SqlServer存储过程,学习的更多相关文章

  1. SqlServer存储过程学习笔记(增删改查)

    * IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...

  2. sqlserver存储过程学习笔记(一)基础知识篇(全)

    说出来有点丢人,做sqlserver应用系统近一年,竟然没有使用过存储过程,现在就好好的梳理一下对应知识,慢慢让其加入到我的项目中去吧. 存储过程的优点:1.运行效率高,提供了在服务器端快速执行sql ...

  3. SQLServer存储过程学习记录

    简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理. 一.存储过程的概述 SQL Server中的存储过程是使用T_SQL编写的代码段.它的目的在于能够方便 ...

  4. sqlserver 存储过程学习笔记(二) 在项目中的应用<多表分页>

    (1)存储过程建立 USE [NewPlat] GO /****** Object:  StoredProcedure [dbo].[usp_PagingLarge]    Script Date: ...

  5. SqlServer存储过程应用二:分页查询数据并动态拼接where条件

    前言 开发中查询功能是贯穿全文的,我们来盘一盘使用存储过程分页查询,并且支持动态拼接where条件. 划重点:支持动态拼接where条件 对存储过程的使用有疑问的同学去[SqlServer存储过程的创 ...

  6. 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)

    解剖SQLSERVER 第十五篇  SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...

  7. Sqlserver 存储过程中结合事务的代码

    Sqlserver 存储过程中结合事务的代码  --方式一 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ ...

  8. SQLServer 存储过程嵌套事务处理

    原文:SQLServer 存储过程嵌套事务处理 某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形. 下面是一种解决存储过程嵌套调用的通用代码,在不能确定存储过程是否 ...

  9. 创建并在项目中调用SQLSERVER存储过程的简单示例

    使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用.创建存储过程 和数据表一样,在使用之前需要创建存储过程,它的简明语法是: 引用: Create PROC ...

随机推荐

  1. Event对象和触发

    1.构造: //非IE浏览器事件构造方法 var event = document.createEvent('HTMLEvents');//'HTMLEvents'自定义事件名 //IE浏览器构造方法 ...

  2. input标签之外是否一定添加form标签

    原文转载自:https://blog.csdn.net/lamanchas/article/details/78753031 input标签外是否添加form标签需要按情形区分:应用场景的区别:1.所 ...

  3. 杭州某知名xxxx公司急招大量java以及大数据开发工程师

    因公司战略以及业务拓展,收大量java攻城狮以及大数据开发攻城狮. 职位信息: java攻城狮: https://job.cnblogs.com/offer/56032 大数据开发攻城狮: https ...

  4. maya2018卸载/安装失败/如何彻底卸载清除干净maya2018注册表和文件的方法

    maya2018提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装maya2018失败提示maya2018安装未完成,某些产品无法安装,也有时候想重新安装maya ...

  5. 14:IO之字符字节流

    字节流: InputStream     OutputStream  字节流:  FileInputStream FileOutputStream BufferedInputStream Buffer ...

  6. JavaScript中的定时事件

    这两个函数都是在给定的时间之后开始执行的,并不是立即执行. var timeId = window.setTimeout("method()",1000); //定时执行,还可以这 ...

  7. 开源性能测试工具Locust使用篇(二)

    那如何理解Locust和TaskSet这两个类呢? class HttpLocust(Locust) 在Locust类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我 ...

  8. USB插入电脑的硬件检测和枚举流程

    USB协议定义了设备的6种状态,仅在枚举过程种,设备就经历了4个状态的迁移:上电状态(Powered),默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两 ...

  9. debian安装tftp服务

    步骤1:安装 apt-get install tftp-hpa tftpd-hpa tftp-hpa是client,tftpd-hpaserver 步骤2:建立tftp目录 mkdir /tftpbo ...

  10. 超级详细使用Webpack4.X 搭建H5开发环境

    超级详细使用Webpack4.X 搭建H5开发环境 会撸码的小马 关注 2018.05.29 17:17* 字数 603 阅读 6453评论 0喜欢 5 很久没弄博客了,这两天有点时间来搞一下最近在弄 ...