我有一个SQL表,存储的唯一nvarchar数据设置为最多 60个字符。
我现在需要每天将每个值输出到文件中。然后,该文件将被送入第三方系统。
但是,此第三方系统要求该值限制为 10个字符。这些值不必是表中的值。它们只需要唯一且最多10个字符即可。它们还必须保持一致,因为每天对于表值使用相同的唯一ID。
我无法截断字符串,因为它可能会失去其唯一性。
看看我的选择,我可以:
使用 GetHashCode ,这看起来是一个简单明了的选项,每次运行它都会得到相同的值。但是,Microsoft文档建议不要出于我的目的使用它...
因此,永远不要在创建哈希码的应用程序域之外使用哈希码,永远不要将哈希码用作集合中的关键字段,并且永远不要保留哈希码。
通过十六进制转换,当修剪成10个字符时,它也可能失去唯一性。
我也看了这个例子,但我不确定它具有唯一性是否可靠:A fast hash function for string in C#
static UInt64 CalculateHash(string read)
{
UInt64 hashedValue = 3074457345618258791ul;
for(int i=0; i<read.Length; i++)
{
hashedValue += read[i];
hashedValue *= 3074457345618258799ul;
}
return hashedValue;
}
我还有其他选择吗?
答案 0 :(得分:0)
向表中添加唯一的身份密钥,然后让SQL Server为您管理增量。如果需要的话,可以使用大量种子。