SqlServer存储过程,学习
存储过程:存储过程(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存储过程,学习的更多相关文章
- SqlServer存储过程学习笔记(增删改查)
* IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值. CREATE PROCEDURE [dbo].[PR_NewsAffiche_AddNewsEntity] ( ...
- sqlserver存储过程学习笔记(一)基础知识篇(全)
说出来有点丢人,做sqlserver应用系统近一年,竟然没有使用过存储过程,现在就好好的梳理一下对应知识,慢慢让其加入到我的项目中去吧. 存储过程的优点:1.运行效率高,提供了在服务器端快速执行sql ...
- SQLServer存储过程学习记录
简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理. 一.存储过程的概述 SQL Server中的存储过程是使用T_SQL编写的代码段.它的目的在于能够方便 ...
- sqlserver 存储过程学习笔记(二) 在项目中的应用<多表分页>
(1)存储过程建立 USE [NewPlat] GO /****** Object: StoredProcedure [dbo].[usp_PagingLarge] Script Date: ...
- SqlServer存储过程应用二:分页查询数据并动态拼接where条件
前言 开发中查询功能是贯穿全文的,我们来盘一盘使用存储过程分页查询,并且支持动态拼接where条件. 划重点:支持动态拼接where条件 对存储过程的使用有疑问的同学去[SqlServer存储过程的创 ...
- 解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译)
解剖SQLSERVER 第十五篇 SQLSERVER存储过程的源文本存放在哪里?(译) http://improve.dk/where-does-sql-server-store-the-sourc ...
- Sqlserver 存储过程中结合事务的代码
Sqlserver 存储过程中结合事务的代码 --方式一 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ ...
- SQLServer 存储过程嵌套事务处理
原文:SQLServer 存储过程嵌套事务处理 某个存储过程可能被单独调用,也可能由其他存储过程嵌套调用,则可能会发生嵌套事务的情形. 下面是一种解决存储过程嵌套调用的通用代码,在不能确定存储过程是否 ...
- 创建并在项目中调用SQLSERVER存储过程的简单示例
使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用.创建存储过程 和数据表一样,在使用之前需要创建存储过程,它的简明语法是: 引用: Create PROC ...
随机推荐
- Python10/24--组合/封装/property装饰器/多态
组合的应用: 1. 什么是组合 一个对象的属性是来自于另外一个类的对象,称之为组合 2. 为何用组合 组合也是用来解决类与类代码冗余的问题 3. 如何用组合 '''class Foo: aaa=111 ...
- ABP框架系列之五十:(Swagger-UI-集成)
Introduction From it's web site: "....with a Swagger-enabled API, you get interactive documenta ...
- xml配置文件中常见的命名空间解释
1.1schema文档即xml schema document,schema文件的格式是.xsd(xml schema document的缩写xsd). 简单来说:schema就是对xml的进一步约束 ...
- 20154305 齐帅 PC平台逆向破解
Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时 ...
- js实现粒子特效,particles.js的使用
今天偶然看到了一个比较炫酷的js网页.是粒子特效的,就试着用了用.一下是步骤,方便以后查看使用. 1.在网站下载源码https://github.com/VincentGarreau/particle ...
- google guava Multimap的学习介绍
1.https://blog.csdn.net/gongxinju/article/details/53634434
- Spark中的Phoenix Dynamic Columns
代码及使用示例:https://github.com/wlu-mstr/spark-phoenix-dynamic phoenix dynamic columns HBase的数据模型是动态的,很多系 ...
- 背水一战 Windows 10 (66) - 控件(WebView): 监听和处理 WebView 的事件
[源码下载] 背水一战 Windows 10 (66) - 控件(WebView): 监听和处理 WebView 的事件 作者:webabcd 介绍背水一战 Windows 10 之 控件(WebVi ...
- 简单的异步函数async/await例子
function resolveAfter2Seconds(x){ return new Promise(resolve => { setTimeout(() => { resolve(x ...
- 如何使用react-redux——傻瓜版
概述 之前看redux官方文档真是看得一脸懵逼,现在自认为会用了,于是来总结一下用法,供以后开发时参考,相信对其他人也有用. 不得不说,用了redux之后感觉挺爽的,有如下优点: 组件大多是函数组件非 ...