【问题标题】:Generate a unique reference number with todays date生成具有今天日期的唯一参考编号
【发布时间】:2020-11-26 20:00:46
【问题描述】:

我正在使用#C 和 SQL。

我希望生成一个唯一的参考编号,例如 XN-ddMMyyyy-0001

  • XN - 只是随机文本,说明哪个参考号属于哪个程序
  • ddMMyyyy - 是 DateTime.Now
  • 0001 - 是我想要自动递增的唯一引用。

如果 SQL 有 XN-26112020-0001 则创建 XN-26112020-0002 等等......

我将如何使用 SQL 数据库和 C# 来执行此操作?

我猜它需要 SQL IF NOT EXIST (SELECT) INSERT INTO 语句。

【问题讨论】:

  • 最简单的方法是将部分保存到单独的字段中,然后连接以进行显示。这是访问数据库吗?您不能使用 Access 自动编号字段类型来生成唯一序列吗?如果不是访问,那么 which db - 添加 db 标记。此外,如果每个值总是有 XN 作为一部分,则没有理由保存它,只需连接文字文本。
  • SQL 不是数据库,它是许多数据库平台使用的语言。你是指 SQLServer 还是 MySQL?
  • SQL Server,对不起,我习惯将 SQLServer 缩短为 SQL。
  • 那为什么不使用 GUID 功能呢?
  • 我建议使用可排序的日期,例如yyyymmdd。解决各种问题。

标签: c# sql-server unique increment


【解决方案1】:

一种方法是使用SEQUENCE,如下所示:

CREATE SEQUENCE seqrefno
AS INT 
START WITH 1
INCREMENT BY 1 
GO


SELECT 'NX-'+CONVERT( CHAR(6),GETDATE() ,12) +'-'+  CAST(NEXT VALUE FOR seqrefno AS VARCHAR(10))

【讨论】:

    【解决方案2】:

    XN-ddMMyyyy 的每个组合生成顺序值需要做很多工作——如果唯一引用确实是唯一的,则要简单得多。您可以通过存储引用的第一部分并为唯一部分使用和标识列,然后将它们组合到计算列中来做到这一点。当然,如果您要生成大量记录,那么您将需要 4 位以上的数字。

    create table MyTable (
        -- ... other columns
        BaseReference varchar(12)
        , uniqueReference int identity (1,1)
        , FullReference as BaseReference + '-' + convert(varchar(4),uniqueReference)
    );
    

    如果您确实必须使其仅对基本引用唯一,那么您需要执行以下操作,这需要独占表锁以避免 2 个进程同时添加重复引用的可能性:

    declare @BaseReference varchar(12) = 'XN-26112020-', @UniqueReference int;
    
    begin tran;
    
    -- Lock the table until the transaction is complete to ensure no duplicates
    -- Get the current max value of the unique portion
    select @UniqueReference = max(try_convert(int,substring(Reference, 13, 4)))
    from dbo.MyTable with (tablockx)
    where substring(Reference, 1, 12) = @BaseReference;
    
    set @UniqueReference = coalesce(@UniqueReference,0) + 1;
    
    insert into dbo.MyTable (/*Other Columns*/ Reference)
      values (/*Other Columns*/ @BaseReference + format(@UniqueReference,'0000'))
    
    commit;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 2014-04-12
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多