存储过程:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。功能强大,限制少

如何调用存储过程
 --无参数的存储过程
exec sp_databases; --有参数的
exec sp_helpdb TestDataBase; exec sp_renamedb TestDataBase, TDB;
-- 当参数较多的时候,建议使用显示赋值
exec sp_renamedb @newname='Testdatabase', @dbname='TDB';

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

创建:

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

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

 alter proc usp_Test
as
begin
begin transaction
declare @myError int;
set @myError = 0;
update bank set balance=balance + 900 where cid='';
set @myError += @@ERROR;
update bank set balance=balance - 900 where cid='';
set @myError += @@ERROR;
if(@myError > 0)
begin
rollback transaction;
end
else
begin
commit transaction;
end
end;
go select * from bank; exec usp_Test;

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

 create proc usp_ZZ2
@from char(4), --从那里转
@to char(4), --转到哪里
@money money --金额
as
begin
begin transaction
declare @myError int;
set @myError = 0;
update bank set balance=balance - @money where cid=@from;
set @myError += @@ERROR;
update bank set balance=balance + @money where cid=@to;
set @myError += @@ERROR;
-- 什么时候提交,什么时候回滚?
if(@myError > 0)
begin
rollback transaction;
end
else
begin
commit transaction;
end
end
go select * from bank; exec usp_ZZ2 '', '', 90; exec usp_ZZ2 @money=500, @from = '', @to = ''; exec usp_ZZ2 '', '', 410; go

依然在转账

 create proc usp_ZZ3
@from char(4),
@to char(4),
@money money
as
begin
begin transaction
declare @last money;
set @last = (select balance from bank where cId=@from);
if(@last - 10 >= @money)
-- bank表里有一个检查约束,余额要大于等于10
begin
update bank set balance=balance - @money where cid=@from;
update bank set balance=balance + @money where cid=@to;
commit;
select '转账成功';
end
else
begin
rollback;
select '转账失败';
end
end
go exec usp_ZZ3 '', '', 900; select * from bank;
 给存储过程的参数设置默认值,示例:
 create proc usp_testDefault
@str nvarchar(50) = '默认值'
as
select @str; exec usp_testDefault '我是传进来的参数啊';

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

 -- 带有output参数的存储过程

 go

 create proc usp_ZZ4
@from char(4),
@to char(4),
@money money,
@state int output
-- 这个state表示需要在存储过程中赋值,外面使用的参数
as
begin
begin transaction
declare @last money;
set @last = (select balance from bank where cId=@from);
if(@last - 10 >= @money) begin
update bank set balance=balance - @money where cid=@from;
update bank set balance=balance + @money where cid=@to;
commit;
set @state = 1;--1表示转账成功
end
else
begin
rollback;
set @state = 0;--转账失败
end
end
go
----------------
-- 使用
declare @State int;
exec usp_ZZ4 '', '', 1000, @State output;
exec usp_ZZ4 @from = '', @to = '', @money = -501, @state = @State output; select @State;
 

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. django的母板系统

    一.母板渲染语法 1.变量 {{ 变量 }} 2.逻辑 {% 逻辑语 %} 二.变量 在母板中有变量时,母板引擎会去反向解析找到这个传来的变量,然后替换掉. .(点),在母板中是深度查询据点符,它的查 ...

  2. 2019.02.16 bzoj5466: [Noip2018]保卫王国(链分治+ddp)

    传送门 题意简述: mmm次询问,每次规定两个点必须选或者不选,求树上的带权最小覆盖. 思路: 考虑链分治+ddpddpddp 仍然是熟悉的套路,先考虑没有修改的状态和转移: 令fi,0/1f_{i, ...

  3. PowerShell工作流学习-1-嵌套工作流和嵌套函数

    关键点: a)嵌套深度没有任何语法限制,但是嵌套三个层次的工作流不支持任何通用参数,包括工作流通用参数 b)嵌套工作流可以调用当前范围和任何父范围内的工作流和函数 c)工作流不允许递归调用,脚本和函数 ...

  4. [au3]批量输入号码程序

    批量输入号码程序 这个文件可以随时产生一个剪贴板文字的文本文件,以供其他程序读取. 这个程序修改了许多次了,主要是针对网络延迟的问题. 最终找到了解决方案:探测输入的界面的反馈信息,也就是反馈的颜色. ...

  5. Scanner 类的使用

    /* Scanner类的使用: 1.导类 2.创建对象 3.调用对应的方法获取数据 */ import java.util.Scanner;//导入Scanner类 public class IfDe ...

  6. 配置docker官方源并用yum安装docker

    一.docker的官方安装文档: https://docs.docker.com/engine/installation/linux/centos/ 由docker给的文档可以看出它也只是去配置了一个 ...

  7. ETL概念详解

    ETL是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程,目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提供分析依据. ETL是BI项目重要的一个环节. 通常情况下,在 ...

  8. HTML中的文本标签

    <span></span> 请使用 <span> 来组合行内元素,以便通过样式来格式化它们. 注释:span 没有固定的格式表现.当对它应用样式时,它才会产生视觉上 ...

  9. 音频科普---oggs

    做为一个做音频的人,很多基础的东西还是要牢记的.最近一个客户用ogg格式的音频,感觉这个很陌生,就翻了这方面的 资料.好比是认识一个大牛,只有在你有一个困扰你很久的困难问题被他瞬间解决的时候,才知道什 ...

  10. 【xsy1300】 原题的旅行 最短路+倍增

    题目大意:有一个$n$个点,$m$条边的无向图,玩家走过第$i$条边,血槽中的血会下降$v_i$点,如果不足$v_i$点,这人会当场去世. 这$n$个点中,有若干个是关键点,在这些关键点可以将血槽补满 ...