我正在使用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
请检查这个link
SELECT RAND(CAST(NEWID() AS VARBINARY))
FROM dbo.SysObjects
对于您的更新语句,请使用这样的方法。
update dbo.test
set seq_no = RAND(CAST(NEWID() AS VARBINARY)) --directly given this function here,
where basket_seq = @i and flag = 'left'
另外,根据MSDN link,您可以使用Sql Server 2000的随机函数工具。
http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/
SELECT RandNumber -- you can set @ran_no with this value in your sql query.
FROM (
SELECT ABS(CAST(NEWID() AS BINARY(6)) %500) + 1 RandNumber --To set max limit number you can replace 500 with any number.
FROM sysobjects
) SAMPLE
GROUP BY
RandNumber
正如你所说,你想在seq_no中设置值,在你的查询中你已经将@ran_no设置为seq_no,所以你应该尝试如下。
SET @ran_no = (SELECT TOP 1 ABS(CAST(NEWID() AS BINARY(6)) %1000) + 1 FROM sysobjects)
在每行产生随机数而不重复。尝试上面的东西。会帮助你。