【问题标题】:Generate random key with verify in database with table lock在具有表锁的数据库中生成带有验证的随机密钥
【发布时间】:2019-11-24 18:38:39
【问题描述】:

我想知道如何正确生成一个唯一的字符串键,例如 16 个字节,并将其放入数据库表中并验证唯一性。我想我必须使用 Random 类或RNGCryptoServiceProvider 类在本地生成一个密钥,然后我应该以某种方式锁定感兴趣的数据库表以进行写入并检查具有指定密钥的记录是否已经存在。

如果是,则进入另一个循环并重复。如果否,则插入具有指定键的新记录,然后释放该表上的数据库锁。我不想使用 GUID,也不想使用数据库自​​增策略。我需要作为原子操作生成的密钥,并确保指定密钥不存在其他记录。有没有办法锁定表并在下次调用 SQL Server 时使用它?

【问题讨论】:

  • 我看到的另一个选项是将 UNIQUE 约束放在列上并插入可能的 SQL 异常。尝试在违反 UNIQUE 约束时插入新的随机密钥
  • 为什么不想使用 GUID?
  • 为了内存,我需要它来为socket会话生成一个key,它应该相对较小并且应该扩展到尽可能低的内存。套接字会话密钥将存储在数据库中以供审计和记录
  • 我看到的另一个选项是在 SQL Server 中生成随机字符串键,因此只需一次调用服务器,我就可以做任何我想做的事情
  • 如果您乐于在 SQL Server 中生成它,那么使用 auto-increment sequence 可能是最简单的方法。

标签: c# sql .net sql-server


【解决方案1】:

以下存储过程应将您的表锁定 2 分钟。您可以根据需要更改延迟参数。

BEGIN TRAN  
SELECT 1 FROM TABLE WITH (TABLOCKX)
WAITFOR DELAY '00:02:00' 
ROLLBACK TRAN   
GO 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2014-01-04
    • 2012-05-21
    • 2015-09-27
    • 2012-06-18
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多