如何通过C#中的代码增加字母数字ID

时间:2015-11-28 18:39:20

标签: c# sql-server

我在数据库中有一个包含字母数字ID字段的表,ID字段包含两个字母和三个数字,如'AA001'。

我想在我的代码中自动增加ID。首先我将数字增加到999,当数字变为999时,字母序列将改变。例如从'AA999'到'AB001'。

我如何在C#中执行此操作?

2 个答案:

答案 0 :(得分:5)

只需拥有一个标准的数字IDENTITY列,然后使用公式映射到您想要的格式。

CREATE TABLE T
  (
     ID INT IDENTITY PRIMARY KEY,
     C AS CHAR(65 + ID / 26000) + CHAR(65 + ID%26000 / 1000) + RIGHT('000' + CAST(ID % 1000 AS VARCHAR), 3)
  ) 

SQL Fiddle

您可以对计算列进行索引以支持针对'AA001'等值的有效查找,但我个人并不打扰。我只是将它们转换为它们的数字等价物,而是对ID列进行查找。

答案 1 :(得分:3)

如果您想在C#中进行操作,可以使用此方法

private static string GetNextId(string seed)
{
    var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string nextId = string.Empty;

    if (seed == "ZZ999")
        throw new ArgumentOutOfRangeException("I can handle till ZZ999 only!");

    var intPart = int.Parse(seed.Substring(2, 3));
    if (intPart < 999)
        nextId = seed.Substring(0, 2) + (++intPart).ToString("000");
    else
    {
        var char2idx = letters.IndexOf(seed.Substring(1, 1));
        if (char2idx < letters.Length - 1)
            nextId = seed.Substring(0, 1) + letters.Substring(++char2idx, 1) + "001";
        else
        {
            var char1idx = letters.IndexOf(seed.Substring(0, 1));
            nextId = letters.Substring(++char1idx, 1) + "A001";
        }
    }
    return nextId;
}