【发布时间】:2020-08-07 07:49:14
【问题描述】:
保存用户后,我将以下代码发送给generate series number。但是我的问题是如果系统的用户同时保存(many user)它有可能有重复的序列号。
public string GenerateSeriesNumber(string code, Entities db, string Ctrl)
{
string year = DateTime.Now.Year.ToString().Substring(2);
string prev_ctrls = "";
var tbl = db.SeriesTable.Where(a => a.SeriesNo.Contains(Ctrl)).OrderByDescending(a => a.SeriesNo);
foreach (var item in tbl.ToList())
{
string[] current_srs = item.SeriesNo.Split('-');
if (prev_srs == "")
prev_srs = item.SeriesNo;
int aaa = Convert.ToInt32(prev_srs.Split('-')[3]);
int bbb = Convert.ToInt32(current_srs[3]);
if (aaa < bbb)
prev_srs = item.SeriesNo;
}
string Series_No = "";
if (tbl != null)
{
string[] LastSeries_No = prev_srs.Split('-');
if (LastSeries_No.Length == 4)
{
LastSeries_No[3] = Int32.Parse(LastSeries_No[3]) + 1 + "";
for (int i = LastSeries_No[3].Length; i < 7; i++)
{
LastSeries_No[3] = "0" + LastSeries_No[3];
}
LastSeries_No[1] = code.ToUpper();
Series_No = String.Join("-", LastSeries_No);
return Series_No;
}
}
return Series_No;
}
我尝试在我的 SQL (I am using SQL Server 2017) 中执行此操作,但其中一个遇到错误并且没有保存
ALTER TABLE dbo.SeriesTable
ADD CONSTRAINT UC_LT UNIQUE (SeriesNo);
【问题讨论】:
-
一种选择是创建一个唯一索引,当抛出异常时只生成另一个数字。
-
@user743414 我试过了,遇到错误。返回到我的 Javascript 后,我再次调用该函数进行保存。但不幸的是,其中一个遇到了上述错误。
-
您的表中可能已经有重复的数据 - 您应该解决重复的行并重新创建约束或添加 WITH NOCHECK 。如果长度不是问题,您可以在密钥末尾添加一个 new_id()
-
@Mitz 抱歉回复晚了。如果他们同时保存数据,唯一会遇到重复数据的时间。如上所述
标签: c# sql-server