为银行交易生成OrderId的最佳方式是什么
本文关键字:最佳 方式 是什么 OrderId 交易 为银行 | 更新日期: 2023-09-27 18:24:17
我需要生成一个没有任何前导零的9位数订单id。最好的方法是什么?
我想的是:创建一个具有唯一ID列的表,然后在C#代码中生成一个100000000到999999999之间的随机数,并尝试将其插入表中,直到我成功为止。在这种情况下获得唯一约束异常并重新生成数字的可能性有多大?
如果我的想法是正确的,那么有没有什么方法可以在sql server本身中做到这一点,而不是在C#代码中处理异常,然后重新生成?
或者还有其他最好的方法可以做到这一点吗?
感谢
生成。。。直到我成功。
嗯。若和所有可能性相比,你们的交易数量保持相对较低,那个么它甚至可能会起作用,但这似乎真的错了。捕获异常并重试?
你有什么理由不使用自动递增键,从100000000开始并计数吗?
您可以在SQL Server中使用标识种子功能并定义起始值http://msdn.microsoft.com/en-us/library/aa933196(v=sql.80).aspx
如果您的目标是生成一个看似随机、唯一的事务ID,我建议使用事务所有者(userid)的部分和事务本身的部分,并将它们组合起来生成您的唯一事务ID。如果这不可能,那么我建议将GUID转换为十进制。以下是操作方法:将System.Decimal转换为System.Guid
如果您有一个令人信服的理由希望ID按随机顺序排列,也许您可以用C#编写一个一次性实用程序来生成随机数字列表,并将它们插入SQL表中。然后,当您的程序需要ID时,它可以从该表中选择下一个可用的ID。当然,您需要一个位字段或其他东西来标记使用了哪些ID。您可能希望将选择和标记操作放入存储过程中,并让该过程在表工作时锁定表,以便同时进行的进程在有机会将其标记为已使用之前不会获得相同的ID。