'SQL Server: how can i generate unique random number at each row of record?

I'm using SQL Server 2000. I'd like to generate random number without repetition at each row. However, my code is not working. I tried many times but i cannot fix the repetition problem. My code as below: I used "case" to handle duplicate number but not work. Anyone can help me? So much Thanks!

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


Solution 1:[1]

Just check this link

 SELECT RAND(CAST(NEWID() AS VARBINARY))
   FROM dbo.SysObjects

For your update statement, use like this.

update  dbo.test
set seq_no =  RAND(CAST(NEWID() AS VARBINARY)) --directly given this function here, 
where basket_seq = @i  and flag = 'left'

Also as per MSDN link you can use Random function too for Sqlserver2000.

http://blog.sqlauthority.com/2007/04/29/sql-server-random-number-generator-script-sql-query/

Solution 2:[2]

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

As you said, you want to set value in seq_no, in your query you have set @ran_no to seq_no so you should try like below.

SET    @ran_no        = (SELECT TOP 1 ABS(CAST(NEWID() AS BINARY(6)) %1000) + 1 FROM   sysobjects)

To generate random number without repetition at each row. Try something like above. will help you.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ajay2707
Solution 2