银行转账存储过程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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 ;
|
流水号生成存储过程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
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'
|