嗨,我正在创建一个自动生成的ID与GP的第一个字符串和GUID的6个字符和auto_increment 000001取决于ID。就像这样
GP-FJISLD-00001
这是我的GUID生成的字符串。它执行32 GUID,当我试图通过搜索主键来查找数据时,这不是很好。
String GUID = System.Guid.NewGuid().ToString().Replace("-", "").ToUpper();
txt_ouput.Text = GUID.ToString();
请帮忙好吗?谢谢你:D
您试过这个字符串吗?子字符串方法与伪随机?
int id = yourId;
int pseudoRandomizerStart = (yourId % 32) - 1; //32 is the length of a Guid, -1 to make sure it lands on the correct index.
string firstSixGuidChars = GUID.Substring(pseudoRandomizerStart, pseudoRandomizerStart + 5); //this is based on index.
string idString = id.ToString();
//Hypothetically, you want your id to be, at minimum 6 digits long,
//with preceding 0s if the number is less than 6 digits
//and the whole number if it's more than 6 digits.
if(idString.Length < 6){
idString = "000000" + idString;
idString = idString.Substring(idString.Length - 6);
}
所以理论上,id 00001将生成Guid的前六个字符,00002将生成Guid的索引1到6,以此类推。如果你的Id是唯一的,那么这应该总是返回一个唯一的键。
然后它将获得您的id,根据您的需要在其前面附加零,然后返回一个六位数的id给您(如果数字小于6位,则前面加零)
这个和您的示例的唯一问题是Guid返回32个十六进制数字,所以我不能保证Guid将返回全字母部分(基于您的示例)。
通过只取GUID的前六个字符,我将保留它的唯一性…
这听起来像你在这里实际上试图做的是有一个复合键,涉及类型,ID和SequenceNumber。
我的建议是只基于ID实现一个主键(完整的guid),然后将其他字段放在非聚集索引上。