SQL Server newID - 它是如何创建的?

时间:2010-05-24 12:28:59

标签: sql sql-server

我想使用newId生成随机数。通常你只会使用一次,但每个newId我可能会生成10个随机数。

足够随机吗?

4 个答案:

答案 0 :(得分:2)

是的,它在统计上是随机的。它只是一个GUID。

你如何计划从一个种子生成10个数字? CHECKSUM(NEWID())通常是你为一个值做的,也许用模数和ABS

答案 1 :(得分:2)

  

通常你只会使用一次,但每个newId我可能会生成10个随机数。这是随机的吗?

这取决于你如何从newid中提取数字。您不能将其视为128个独立的随机位。

例如,如果您使用前8位生成0到255之间的一个随机数,请使用接下来的8位生成另一个数字等,然后您将看到您的数字不会是均匀随机的。

              v

E058D654-35A8-47F2-AE40-1C4EEBBDC549
01461481-ED8D-4B85-90FA-C08621D98DAE
AE861E4E-3469-4BDB-A38B-0031DACC8DAE
AF8905D0-E41B-4300-94F2-33BB45698CD1
003308A6-AE0A-4E20-9F24-047A6955E748
76F9B7ED-79AB-4EB1-B361-8C0AF5177CE3
B8F1CAC0-591D-436B-BB21-FAAD9EECA983
7FBEAEFD-2163-4315-A783-8106909E47D8
85E2FC60-E7B3-400F-B20A-CEFBECAEE4F9
17ED0A03-ADAD-4521-97EE-04815A867B32

              ^
              |
              always 4

您还应该尝试避免重复使用相同的位来生成不同的随机数,因为您的数字将变得相关。如有疑问,请勿重复使用相同的号码。

请注意,您还可以调用RAND函数。这将返回统一分布中的数字。

答案 2 :(得分:1)

NewID generates GUID。这是随机的。

答案 3 :(得分:1)

随机足够什么?当你说用它来生成时,你是否只是用它来播种PNRG?我不确定它是否比时间戳更好。或者你要从GUID中提取位 - 这是一个坏主意。

http://www.random.org/randomness/