如何为数据库中的列生成唯一字符串?

Posted

技术标签:

【中文标题】如何为数据库中的列生成唯一字符串?【英文标题】:How to generate a unique string for a column in a database? 【发布时间】:2020-08-05 15:57:34 【问题描述】:

我正在尝试使用唯一字符串填充数据库中的列。我如何做到这一点?

我当前的代码只是调用GetUniqueKey() 方法的同一个实例,所以它只生成相同的密钥。此方法只会运行一次。就像我说的,我试图为每一行生成一个唯一的键。 GetUniqueKey() 方法生成一个字母数字字符串。如何调用Hash.GetUniqueKey() 的新实例以获得新的唯一键?

private readonly int KEY_SIZE = 5;

public void Fill() 
    connectionStringBuilder.InitialCatalog = "parts";
    connection.ConnectionString = CONSTANTS.connStringParts;

    string query = @"UPDATE parts SET [InternalID] = '" + Hash.GetUniqueKey(KEY_SIZE) + "'";
    SqlCommand command = new SqlCommand(query, connection);
    using(connection) 

        try 
            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();
        
        catch(Exception ex) 
            MessageBox.Show(Resource1.DatabaseConnectionError, Resource1.Error, MessageBoxButton.OK, MessageBoxImage.Error);
        
    

【问题讨论】:

【参考方案1】:

您考虑过使用 Guid 吗?

https://docs.microsoft.com/tr-tr/dotnet/api/system.guid.newguid?view=netframework-4.8

// Create and display the value of two GUIDs.
Guid g = Guid.NewGuid();
Console.WriteLine(g);
Console.WriteLine(Guid.NewGuid());

// This code example produces a result similar to the following:

// 0f8fad5b-d9cb-469f-a165-70867728950e
// 7c9e6679-7425-40de-944b-e07fc1f90ae7

【讨论】:

问题是,它仍然会调用相同的 NewGuid() 实例,因此它会生成相同的 GUID。不过很有趣。我会考虑将其作为我的GetUniqueKey() 方法的替代方法 不,很难生成相同的 GUID。查看此帖子***.com/questions/39771/… 也许我实现错了,但是当使用string query = @"UPDATE parts SET [InternalID] = '" + Guid.NewGuid() + "'"; 时,我的结果是每一行的相同键。见:prntscr.com/s43cd9 噢,我明白了。使用此 sql 进行更新 :) UPDATE 部分 SET [InternalID] = NEWID() 我不太明白所以我按照这个线程创建了一个新表,然后合并表***.com/questions/1746125/…

以上是关于如何为数据库中的列生成唯一字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何为android中的字符串输入生成唯一的哈希码...?

如果没有插入值,如何为 SQL Server 中的列字段分配唯一值?

如何为 Oracle 中的列组合赋予唯一约束?

如何为 Cosmos DB 集合中的列创建唯一键?

如何为R中的重复值分配唯一的等级编号

如何为 BigQuery 表中的记录生成唯一键值?