YYMM ####如何生成发票号

时间:2015-08-29 13:53:18

标签: c# sql-server sql-server-2014

我必须生成发票编号,如YYMM #### YY和MM很简单,我们可以使用今天的日期,但如何添加自定义4位数字从001和999开始 我使用sql存储发票号码

2 个答案:

答案 0 :(得分:2)

如果您每月最多只能获得999张发票,那么您可能不必担心两张快速连续发票中的低效率,因此您需要生成发票:

  • 计算出要使用的前缀(请注意此处的时区......)
  • 查找带有查询的最高发票ID,以查找以您的前缀开头的所有发票ID(如果使用数字类型,则在最小和最大可能值之间),按ID排序(降序),仅取第一个< SUP> 1
  • 解析此内容并添加一个以生成新ID
  • 尝试插入具有指定ID
  • 的新发票
  • 如果您遇到约束违规(重复ID),请再次执行该过程

如果您必须处理可能由许多不同客户生成的批次发票,并且不需要连续的发票ID,则可以对每个客户使用lo/hi algorithm有效地&#34;保留&#34;标识。虽然这听起来有点矫枉过正。

哦,如果一个月内 超过999张发票,你应该知道你想要发生什么......

1 你可以在这里避免过滤,并假设其他一切都遵循相同的约定,但我个人过滤

答案 1 :(得分:2)

如果要在SQL Server端执行此操作,则需要在sql server中创建SEQUENCE对象,并且可以执行类似的操作。

SEQUENCE

CREATE SEQUENCE dbo.GetInvoiceNumber
    AS INT
    START WITH 1
    INCREMENT BY 1
    MINVALUE 1 
    MAXVALUE 999
    CYCLE
    CACHE 10
;

SQL Server调用

SELECT CONVERT(VARCHAR(4), GETDATE(), 12) 
       + RIGHT('0000' 
       + CAST( NEXT VALUE FOR dbo.GetInvoiceNumber AS VARCHAR(3)),4)

结果

查询将返回

之类的值
15080001
15080002
15080003
15080004
.......

注意

您确定您的客户在一个月内永远不会生产超过999张发票,我认为这个数字应该相当高,以防万一。