【发布时间】:2016-01-11 23:26:29
【问题描述】:
我正在使用 SQL Server 2000。我想在每一行生成随机数而不重复。但是,我的代码不起作用。我尝试了很多次,但我无法解决重复问题。我的代码如下:我使用“case”来处理重复的数字但不起作用。任何人都可以帮助我吗?非常感谢!
DECLARE @index INT
,@ran_no INT
,@counter INT
,@i INT
SET @i = 1
WHILE @i <= 18
BEGIN
SELECT @index = count(basket_seq)
FROM dbo.test
WHERE basket_seq = @i
AND flag = 'left'
BEGIN
UPDATE dbo.test
SET @ran_no = convert(INT, 1 + @index * RAND(CHECKSUM(NEWID())))
,@ran_no = (
CASE
WHEN convert(INT, 1 + @index * RAND(CHECKSUM(NEWID()))) NOT IN (
SELECT seq_no
FROM dbo.test
WHERE basket_seq = @i
AND flag = 'left'
)
THEN @ran_no
END
)
,seq_no = @ran_no
WHERE basket_seq = @i
AND flag = 'left'
END
SET @i = @i + 1
END
【问题讨论】:
-
为什么使用case语句?解释一下
-
因为我想检查“seq_no”列中是否已经存在该随机数。 CASE WHEN convert(INT, 1 + @index * RAND(CHECKSUM(NEWID()))) NOT IN (SELECT seq_no FROM dbo.test WHERE basket_seq = @i AND flag = 'left')
-
我认为 SQL 2000 中不存在 NEWID()。
-
随机是一个要求还是目标是有一个唯一的数字?问题是因为你写了“我愿意”,如果这是一个愿望而不是一个要求。
-
实际上,我想为每一行记录分配唯一编号。如果我只是在每条记录中添加序列号(1,2,3,4.......),恐怕它每次都会显示相同的记录。所以我尝试分配唯一的随机数。
标签: sql-server random sql-server-2000