我在数据库中有一个包含字母数字ID字段的表,ID字段包含两个字母和三个数字,如'AA001'。
我想在我的代码中自动增加ID。首先我将数字增加到999,当数字变为999时,字母序列将改变。例如从'AA999'到'AB001'。
我如何在C#
中执行此操作?
答案 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)
)
您可以对计算列进行索引以支持针对'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;
}