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

标签 sql sql-server

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

是否足够随机?

最佳答案

Usually you would use it just once, but I might be generating up to 10 random numbers per newId. Is it random enough?

这取决于您如何从 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 函数。这会返回均匀分布的数字。

关于SQL Server newID - 它是如何创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2896943/

相关文章:

python - 使用 pyodbc 返回文字 SQL 的任何方式

sql-server - 在包含更新语句和 CTE 的存储过程中使用 Begin tran

sql - 如何在 Postgres 中使用 json 键连接 2 个表?

sql - 有没有更好的方法来调试 SQL?

sql - TSQL:如何根据字符串和日期进行更新?

SQL查询根据加入日期获取客户数量

java - 如何在 Group by 子句中使用 SQL Case?

sql - 合并 - 多个 WHEN MATCHED 案例并进行更新

sql-server - 使用 DATENAME 时的 SQL SET DATEFIRST

sql-server - 我应该在删除数据之前禁用聚簇索引吗?