实用的银行转账存储过程和流水号生成存储过程_MsSql

银行转账存储过程

USE [BankInfor]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Transfer](@inAccount int,@outAccount int,@amount float)
as declare
  @totalDeposit float;
  begin
  select @totalDeposit=total from Account where AccountNum=@outAccount;
  if @totalDeposit is null
  begin
  rollback;
  print'转出账户不存在或账户中没有存款'
  return;
  end
  if @totalDeposit<@amount
  begin
  rollback;
  print'余额不足,不能操作'
  return;
  end
  update Account set total=total-@amount where AccountNum=@outAccount;
  update Account set total=total+@amount where AccountNum=@inAccount;
  print'转账成功!'
  commit;
  end;

流水号生成存储过程

if exists(select 1 from sysobjects where id=OBJECT_ID('GetSerialNo') and xtype='p')
drop proc GetSerialNo
go
Create procedure [dbo].[GetSerialNo]
(
  @sCode varchar(50)
)
as
begin
 Declare @sValue varchar(16),@dToday  datetime,@sQZ varchar(50) --这个代表前缀
  Begin Tran
  Begin Try
   -- 锁定该条记录,好多人用lock去锁,起始这里只要执行一句update就可以了
  --在同一个事物中,执行了update语句之后就会启动锁
  Update SerialNo set sValue=sValue where sCode=@sCode
  Select @sValue = sValue From SerialNo where sCode=@sCode
  Select @sQZ = sQZ From SerialNo where sCode=@sCode
   -- 因子表中没有记录,插入初始值
   If @sValue is null
   Begin
    Select @sValue = convert(bigint, convert(varchar(6), getdate(), 12) + '000001')
    Update SerialNo set sValue=@sValue where sCode=@sCode
   end else
   Begin        --因子表中没有记录
    Select @dToday = substring(@sValue,1,6)
    --如果日期相等,则加1
    If @dToday = convert(varchar(6), getdate(), 12)
     Select @sValue = convert(varchar(16), (convert(bigint, @sValue) + 1))
    else       --如果日期不相等,则先赋值日期,流水号从1开始
     Select @sValue = convert(bigint, convert(varchar(6), getdate(), 12) +'000001')
   Update SerialNo set sValue =@sValue where sCode=@sCode
   End
  Select result = @sQZ+@sValue
   Commit Tran
  End Try
  Begin Catch
   Rollback Tran
   Select result = 'Error'
  End Catch
end
select*from SerialNo
select convert(varchar(6), getdate(), 12)+'000001'

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索银行转账流水号
转账流水号查询、银行转账流水号查询、支付宝转账流水号查询、支付宝转账流水号、转账流水号,以便于您获取更多的相关知识。

时间: 2024-09-20 06:35:15

实用的银行转账存储过程和流水号生成存储过程_MsSql的相关文章

实用的银行转账存储过程和流水号生成存储过程

银行转账存储过程 USE [BankInfor] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[Transfer](@inAccount int,@outAccount int,@amount float) as declare @totalDeposit float; begin select @totalDeposit=total from Account where AccountNum

超级简单:共享两个自动生成存储过程的工具

开发一个项目或者开发一个应用系统初期大多数都是从数据库,类,UI界面 开始的.其中最令人厌烦的是写些简单的CRUD的存储过程,以及调用这些存储过 程的方法的类. 我花了很多时间在网上寻找,去找一个能根据能数据库中一个存在的数据表 ,为我们产生大部分存储过程和调用这些存储过程C#代码的实用的程序.这里共 享两个我觉得还不错的程序给大家. 第一个是SQLAutoGen,如下图:

有没有自动生成存储过程的工具?

问题描述 谢谢高手啊,我想下载一个那样的工具了!! 解决方案 解决方案二:好像没有啊!自己写吧解决方案三:有..你去搜一下李天平的动软.net代码生成器,,里面有生成存储过程的..解决方案四:哦,谢谢高手啦

sql生成(插入、修改、删除数据的存储过程)代码的存储过程

GO /****** 对象: StoredProcedure [dbo].[pro_GenerateProSet] 脚本日期: 08/03/2012 11:26:43 ******/ IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pro_GenerateProSet]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[pro_GenerateP

MySQL存储过程详解 mysql 存储过程

mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的

SQL SERVER编写存储过程小工具_存储过程

在开发数据库系统的过程中,经常要写很多的存储过程.为了统一格式和简化开发过程,我编写一些存储过程,用来自动生成存储过程.下面就为您简单介绍一下它们.其中一个用于生成Insert过程,另一个用于生成Update过程.  Sp_GenInsert  该过程运行后,它为给定的表生成一个完整的Insert过程.如果原来的表有标识列,您得将生成的过程中的SET IDNTITY_INSERT ON 语句手工删除.  语法如下  sp_GenInsert < Table Name >,< Stored

access如何用代码在“默认值”里实现自动编号?单据流水号生成问题。

access|流水号|问题 如何用代码在"默认值"里实现自动编号?单据流水号生成问题.  简述:单据流水号生成问题    问题: 如何用代码在"默认值"里实现自动编号?单据流水号生成问题. 如何用代码在"默认值"里实现自动编号?如果我想实现不同类型的自动编号,我应该怎么设置代码呢?如:第1号.第2号.............第198号..................或:CN0001-A.CN0002-B.CN0003-B...........

如何在存储过程中执行别的存储过程并获取其返回的结果集

背景 在sqlserver存储过程的编写过程中,通常会碰到繁杂的业务逻辑,将一个大的存储过程拆分成多个小存储过程来做是常用的做法. 问题 在存储过程A中需要调用存储过程B,而存储过程B返回一个Table,A需要获取到B的Table,再进行下一步的处理. 本文解决的问题是:如何在A中执行B,并获取B的返回Table 思路 在A中使用Exec来执行存储过程B 在A中定义临时表,并将B返回的数据插入临时表中 步骤 新建一张测试表,并批量向表中插入若干数据 CREATE TABLE TestTable

java存储过程-java调用oracle存储过程到execute()就卡住了?

问题描述 java调用oracle存储过程到execute()就卡住了? debug看了一下就是走到execute()这就卡住了,是偶尔才发生这样的状况,一般这样的情况等待10分钟左右就没有问题了,在execute()这就不会卡住了,很快就执行过去. 我感觉是系统中有很多用户都在做各种不同的操作占用了oracle的什么资源(我们这个系统中有不少操作都是用存储过程实现的),导致执行存储过程时,一直再等待这个资源,希望有大神能告诉我是什么原因导致的?谢谢 解决方案 java调用oracle存储过程用