我有一张包含50k记录的表格。现在我想用随机数更新表的一列。这个数字应该是7位数。
我不想用程序或循环来做这件事。
PinDetailId PinNo
--------------------
783 2722692
784 9888648
785 6215578
786 7917727
我已尝试过此代码,但无法成功。我需要7位数字。
SELECT
FLOOR(ABS(CHECKSUM(NEWID())) / 2147483647.0 * 3 + 1) rn,
(FLOOR(2000 + RAND() * (3000 - 2000) )) AS rn2
FROM
[GeneratePinDetail]
答案 0 :(得分:2)
对于随机数,您可以使用ABS(CHECKSUM(NewId())) % range + lowerbound
:
(来源:How do I generate random number for each row in a TSQL Select?)
INSERT INTO ResultsTable (PinDetailId, PinNo)
SELECT PinDetailId,
(ABS(CHECKSUM(NewId())) % 1000000 + 1000000) AS `PinNo`
FROM GeneratePinDetail
ORDER BY PinDetailId ASC;
我无法保证这些将是独一无二的;但它应该均匀分布(任何7位数字的机会均等)。如果要检查重复项,可以运行:
SELECT PinDetailId, PinNo
FROM ResultsTable result
INNER JOIN (
SELECT PinNo
FROM ResultsTable
GROUP BY PinNo
HAVING Count(1) > 1
) test
ON result.PinNo = test.PinNo;
答案 1 :(得分:0)
您可以创建序列对象并更新字段 - 它应该每次更新自动递增。
https://docs.microsoft.com/en-us/sql/t-sql/functions/next-value-for-transact-sql
根据评论更新: 检索序列中的“下一个值”后,您可以对其进行操作以进行随机化。然后基本上可以使用该序列为随机化函数创建唯一的种子。
如果您不想自己创建函数,SQL Server已经内置了RAND函数。
https://docs.microsoft.com/en-us/sql/t-sql/functions/rand-transact-sql