declare JSOrder scroll cursor for select Order_ID from DayCredence
--打开游标
open JSOrder
fetch last from JSOrder into @Order_ID
if @@fetch_status=0 --如果游标成功执行
begin
if @@rowcount=0--如果日记账表中没有记录
begin
set @Order_ID='00000001'
end
else
begin
set @TempOrder_ID=convert(bigint,@order_ID)
set @TempOrder_ID=@TempOrder_ID+1
if @TempOrder_ID<10
set @Order_ID='0000000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100
set @Order_ID='000000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<1000
Set @Order_ID='00000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<10000
Set @Order_ID='0000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100000
Set @order_ID='000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<1000000
Set @Order_ID='00'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<10000000
Set @Order_ID='0'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100000000
Set @Order_ID=Convert(varchar,@TempOrder_ID)
end
end
close JSOrder
deallocate JSOrder有两个问题,
1,当数据库中没记录的时候Order_ID字段不能生成'00000001'编号.
2,当数据库中有记录时Order_ID不能生成'0000000X',X表示顺序号.
而只是成1,2,3,4,没有前面的'000000'字符。谢谢
--打开游标
open JSOrder
fetch last from JSOrder into @Order_ID
if @@fetch_status=0 --如果游标成功执行
begin
if @@rowcount=0--如果日记账表中没有记录
begin
set @Order_ID='00000001'
end
else
begin
set @TempOrder_ID=convert(bigint,@order_ID)
set @TempOrder_ID=@TempOrder_ID+1
if @TempOrder_ID<10
set @Order_ID='0000000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100
set @Order_ID='000000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<1000
Set @Order_ID='00000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<10000
Set @Order_ID='0000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100000
Set @order_ID='000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<1000000
Set @Order_ID='00'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<10000000
Set @Order_ID='0'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100000000
Set @Order_ID=Convert(varchar,@TempOrder_ID)
end
end
close JSOrder
deallocate JSOrder有两个问题,
1,当数据库中没记录的时候Order_ID字段不能生成'00000001'编号.
2,当数据库中有记录时Order_ID不能生成'0000000X',X表示顺序号.
而只是成1,2,3,4,没有前面的'000000'字符。谢谢
--打开游标
open JSOrder
fetch last from JSOrder into @Order_ID
if @@fetch_status=0 --如果游标成功执行
begin
set @TempOrder_ID=convert(bigint,@order_ID)
set @TempOrder_ID=@TempOrder_ID+1
if @TempOrder_ID<10
set @Order_ID='0000000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100
set @Order_ID='000000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<1000
Set @Order_ID='00000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<10000
Set @Order_ID='0000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100000
Set @order_ID='000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<1000000
Set @Order_ID='00'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<10000000
Set @Order_ID='0'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100000000
Set @Order_ID=Convert(varchar,@TempOrder_ID)
end else
begin
Set @order_ID='00000001'
end
close JSOrder
deallocate JSOrder
GO
1.@@rowcount的判断问题
2.不能用return返回@order_ID
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GOALTER PROCEDURE InCredence
@Operation_ID varchar(10), --操作员编号
@Subject_ID varchar(10), --科目编号
@JF_ID varchar(15), --借方编号
@DF_ID varchar(15), --贷方编号
@JF_Name varchar(100),
@DF_Name varchar(100),
@PZ_Code varchar(10), --凭证编号
@Summary varchar(50), --备注
@FS_Money decimal(18,2) , --发生额
@Credence_Type int --单据类型(1,现金收,2现金付,3转账,4转账借,5转账贷) AS
declare @DateTime datetime --单据时间
declare @year int --年
declare @Month int --月
declare @Order_ID varchar(10) --流水号
declare @TempOrder_ID bigint
--------------------------------------------------------------------------
set @DateTime =getdate() --得到当前日期
set @year=year(@DateTime) --根据当前日期得到年
set @Month=month(@datetime) --根据当前日期得到月--------------------------------------------------------------------------
--开始业务
--计算流水号
--定义游标
declare JSOrder scroll cursor for select Order_ID from DayCredence
--打开游标
open JSOrder
fetch last from JSOrder into @Order_ID
if @@fetch_status=0 --如果游标成功执行
begin
set @TempOrder_ID=convert(bigint,@order_ID)
set @TempOrder_ID=@TempOrder_ID+1
if @TempOrder_ID<10
set @Order_ID='0000000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100
set @Order_ID='000000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<1000
Set @Order_ID='00000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<10000
Set @Order_ID='0000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100000
Set @order_ID='000'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<1000000
Set @Order_ID='00'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<10000000
Set @Order_ID='0'+Convert(varchar,@TempOrder_ID)
if @TempOrder_ID<100000000
Set @Order_ID=Convert(varchar,@TempOrder_ID)
end
else
begin
set @Order_ID='00000001'
end
close JSOrder
deallocate JSOrder
select * from credence where datetime=@datetime --检查当日是否日结
if @@rowcount=0 --如果当天没有日结
begin
insert into DayCredence ( [DateTime],
[Operation_ID],
[Order_ID],
[JF_ID],
[DF_ID],
[Subject_ID],
[JF_Name],
[DF_Name],
[Year],
[Month],
[PZ_Code],
[Summary],
[FS_Money],
[Credence_Type])
values
(
@datetime,
@Operation_ID,
@Order_ID,
@JF_ID,
@DF_ID,
@Subject_ID,
@JF_Name,
@DF_Name,
@Year,
@Month,
@PZ_Code,
@Summary,
@FS_Money,
@Credence_Type
)
end
else
begin
raiserror('已经日结,不能进行记账操作!',16,1)
endGO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
否则就是'00000001'返回1,是'00000002'返回2,......
@Operation_ID varchar(10), --操作员编号
@Subject_ID varchar(10), --科目编号
@JF_ID varchar(15), --借方编号
@DF_ID varchar(15), --贷方编号
@JF_Name varchar(100),
@DF_Name varchar(100),
@PZ_Code varchar(10), --凭证编号
@Summary varchar(50), --备注
@FS_Money decimal(18,2) , --发生额
@Credence_Type int, --单据类型(1,现金收,2现金付,3转账,4转账借,5转账贷)@Order_ID varchar(10) output ---老冯的修改 AS
declare @DateTime datetime --单据时间
declare @year int --年
declare @Month int --月
--declare @Order_ID varchar(10) --流水号 ---老冯的修改
declare @TempOrder_ID bigint
--------------------------------------------------------------------------
set @DateTime =getdate() --得到当前日期
set @year=year(@DateTime) --根据当前日期得到年
set @Month=month(@datetime) --根据当前日期得到月--------------------------------------------------------------------------
deallocate JSOrder
--增加下面两条
if @order_id<>'00000001'
set @Order_ID='0000000'+Convert(varchar,@TempOrder_ID)
---
select * from credence where datetime=@datetime --检查当日是否日结
set @TempOrder_ID=@TempOrder_ID+1
if @TempOrder_ID<10
set @Order_ID='0000000'+Convert(varchar,@TempOrder_ID)
else
if @TempOrder_ID<100
set @Order_ID='000000'+Convert(varchar,@TempOrder_ID)
else
if @TempOrder_ID<1000
Set @Order_ID='00000'+Convert(varchar,@TempOrder_ID)
else
if @TempOrder_ID<10000
Set @Order_ID='0000'+Convert(varchar,@TempOrder_ID)
else
if @TempOrder_ID<100000
Set @order_ID='000'+Convert(varchar,@TempOrder_ID)
else
if @TempOrder_ID<1000000
Set @Order_ID='00'+Convert(varchar,@TempOrder_ID)
else
if @TempOrder_ID<10000000
Set @Order_ID='0'+Convert(varchar,@TempOrder_ID)
else
if @TempOrder_ID<100000000
Set @Order_ID=Convert(varchar,@TempOrder_ID)
Set @Order_ID=Convert(varchar,@TempOrder_ID)所以返回的值就没有任何前缀了.
if @TempOrder_ID<10
....
if @TempOrder_ID<100 and @TempOrder_ID >= 10
....if @TempOrder_ID<1000 and @TempOrder_ID >= 100
...
@No--单号@NoLen--单号长度 =@prefix为单号前缀if len(@No)<@NoLen and @NoLen>0
set @No=@prefix+left('000000000000000000000000000000000000',@NoLen-len(@No))+@No
else
set @No=@prefix+@No