我要为当天创建唯一的批次号,明天的批次号应为max(batchno)+1。和序列号应保持如下
record set should be as follows
ID | invoice date | Batchno | seqno
1 | 2019-05-24 |201905000001 | 1
2 | 2019-05-24 |201905000001 | 2
3 | 2019-05-25 |201905000002 | 1
4 | 2019-05-25 |201905000002 | 2
ON [dbo].[EBSIEMSTransfernew]
AFTER INSERT
AS
declare @year varchar(4)
declare @month varchar(2)
declare @serialNo varchar(10)
select @year = year(getdate())
select @month = REPLICATE('0', 2-len( month(getdate())))+ cast(month(getdate()) as varchar)
select @serialNo = Max(right(BatchNo,5)) FROM [Onaccount].[dbo].[EBSIEMSTransfernew] where InvoiceDate >= dateadd(day,datediff(day,1,GETDATE()),0)
AND InvoiceDate < dateadd(day,datediff(day,0,GETDATE()),0)
BEGIN
UPDATE [Onaccount].[dbo].[EBSIEMSTransfernew]
SET BatchNo = @year + @month + REPLICATE('0', 5 - LEN(@serialNo + 1)) + CAST(@serialNo + 1 AS varchar)
FROM [Onaccount].[dbo].[EBSIEMSTransfernew] INNER JOIN
inserted AS i ON EBSIEMSTransfernew.InvoiceDate = i.InvoiceDate
WHERE (EBSIEMSTransfernew.InvoiceDate = i.InvoiceDate)
SET NOCOUNT ON;
END
GO
答案 0 :(得分:1)
对于每日批号,我可以选择使用YYYYMMDD作为批号。因为这在所有意义上都是唯一的。因此,每个新的日期本身就是一个新的UNIQUE批号,如下所示-
20190526
20190527
...
20190530
当您管理每天从1开始的每日序列号/序列号时,它们也会一起产生有意义的数字。您可以轻松地从中读取一些价值。我建议根据一天可能需要的最大发票猜测,使用诸如0001..0002之类的“ seqno”。
您现在还可以从下面的两个数字生成发票编号,如下所示-
201905260001
201905260002
然后,发票号本身将很有意义,因为它很容易理解,发票的日期为20190526,而销售发票是当天的第一次/第二次销售。
答案 1 :(得分:0)
触发器似乎很愚蠢。为什么不只使用计算列呢?
create view v_EBSIEMSTransfernew as
select t.*,
dense_rank() over (order by invoice_date)
from EBSIEMSTransfernew t;
诚然,如果没有批次,这将跳过几天。如果存在问题,则可以在视图中生成值:
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
您对问题的描述仅提及一个数字。我不确定其余数字的来源,但是您可以修改这两种方法以添加前缀。