银行转账存储过程USE [BankInfor]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[Transfer](@inAccount int,@outAccount int,@amount float)as declare@totalDeposit float;beginselect @totalDeposit=total from Account where AccountNum=@outAccount;if @totalDeposit is nullbeginrollback;print"转出账户不存在或账户中没有存款"return;endif @totalDeposit<@amountbeginrollback;print"余额不足,不能操作"return;endupdate 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 GetSerialNogoCreate procedure [dbo].[GetSerialNo](@sCode varchar(50))as beginDeclare @sValue varchar(16),@dTodaydatetime,@sQZ varchar(50) --这个代表前缀 Begin Tran Begin Try -- 锁定该条记录,好多人用lock去锁,起始这里只要执行一句update就可以了 --在同一个事物中,执行了update语句之后就会启动锁 Update SerialNo set sValue=sValue where sCode=@sCodeSelect @sValue = sValue From SerialNo where sCode=@sCodeSelect @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)--如果日期相等,则加1If @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+@sValueCommit TranEnd TryBegin Catch Rollback Tran Select result = "Error" End Catchend select*from SerialNoselect convert(varchar(6), getdate(), 12)+"000001"