什么是为银行交易生成OrderId的最佳方式?

时间:2012-02-12 15:25:07

标签: c# sql-server-2008 random unique-key onlinebanking

我需要生成一个没有任何前导零的9位数订单ID。这样做的最佳方式是什么?

我的想法是:创建一个具有唯一ID列的表,然后在C#代码中生成介于100000000和999999999之间的随机数,并尝试将其插入表中,直到我成功为止。在此获得唯一约束异常并重新生成数字的可能性有多大?

如果我正在考虑正确的方向,有没有办法在sql server本身中执行此操作,而不是在C#代码中处理异常然后重新生成?

或者还有其他最佳方法吗?

由于

4 个答案:

答案 0 :(得分:1)

  

生成......直到我成功。

好。如果你的交易数量与所有可能性相比仍然相对较低,它甚至可能会起作用,但这似乎是错误的。捕获异常并重试?

您是否有任何理由不使用自动增量密钥,从100000000开始计算?

答案 1 :(得分:1)

您可以在SQL Server中使用标识种子功能并定义起始值http://msdn.microsoft.com/en-us/library/aa933196(v=sql.80).aspx

答案 2 :(得分:1)

如果您的目标是生成看似随机的唯一交易ID,我建议使用交易所有者(userid)中的部分和交易本身的部分,并将这些部分组合起来生成您的唯一交易ID。如果那是不可能的,那么我建议将GUID转换为小数。这是怎么做的: Converting System.Decimal to System.Guid

答案 3 :(得分:0)

如果您有令人信服的理由希望ID是随机顺序,也许您可​​以在C#中编写一次性实用程序来生成随机数字列表并将它们插入到SQL表中。然后,当您的程序需要ID时,它可以从该表中选择下一个可用的ID。当然,您需要一些字段或其他内容来标记已使用的ID。您可能希望将select和mark操作放入存储过程并让该过程锁定表,因此同时进程在有机会将其标记为已使用之前不会获得相同的ID。