我需要生成一个没有任何前导零的 9 位订单 ID。做这个的最好方式是什么 ?
我想到的是:创建一个具有唯一 ID 列的表,然后在 C# 代码中生成一个介于 100000000 和 999999999 之间的随机数,并尝试将其插入表中,直到我成功为止。在此获得唯一约束异常并重新生成数字的机会是什么?
如果我的想法是正确的,有没有办法在 sql server 本身中执行此操作,而不是在 C# 代码中处理异常然后重新生成?
或者有没有其他最好的方法来做到这一点?
谢谢
我需要生成一个没有任何前导零的 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,我建议使用来自交易所有者(用户 ID)的部分和来自交易本身的部分,并将它们组合起来以生成您的唯一交易 ID。如果这不可能,那么我建议将 GUID 转换为小数。操作方法如下: 将 System.Decimal 转换为 System.Guid
如果您有一个令人信服的理由希望 ID 以随机顺序排列,也许您可以在 C# 中编写一个一次性实用程序来生成随机数字列表并将它们插入 SQL 表中。然后,当您的程序需要一个 ID 时,它可以从该表中选择下一个可用的 ID。当然,您需要一个位字段或其他东西来标记已使用的 ID。您可能希望将选择和标记操作放入存储过程中,并让该过程在表工作时锁定表,以便同时处理的进程在有机会将其标记为已使用之前不会获得相同的 ID。