Генериране на random числа от 1 до 1000
Здравейте колеги!
Опитвам се да попълня рандом числа в една колона от 1 до 1000 без да има повторение, но нещо не ми се получават нещата.
Ще се радвам, ако някой може да каже къде бъркам и какъв е проблема с нулата, че все излиза.
Това е кода:
CREATE PROCEDURE usp_RandomNumber
AS
BEGIN
DECLARE @rowsCount INT
DECLARE @random INT 
DECLARE @isExist BIT
DECLARE @existRandom INT
    SET @existRandom = 0
    SET @rowsCount = 0
    SET @isExist = 1
    SET @rowsCount = (SELECT COUNT(*) AS Count FROM [dbo].[RandomNumbers] AS n)
    
    IF(@rowsCount < 1000)
        BEGIN
            WHILE(@isExist = 1)
             BEGIN
                SET @random = ABS(CHECKSUM(NewId())) % 1000
                SET @existRandom = (SELECT TOP 1 Numbers FROM RandomNumbers WHERE Numbers = @random AND Numbers != 0)
                IF(@existRandom > 0)
                 BEGIN 
                    SET @isExist = 1
                 END
                ELSE
                 BEGIN
                    SET @isExist = 0
                 END
                IF(@isExist = 0 )
                 BEGIN
                    INSERT INTO RandomNumbers(Numbers)
                    VALUES (@random)
                    SET @existRandom = 0
                 END
             END
        END
END
Въпроса ми беше защо като попълня таблицата ми излизат нули, като искам да няма.
Ето аз съм го направил без нули.
Защото това "SET @random = ABS(CHECKSUM(NewId())) % 1000"
ти генерира число от 0 до 999
и правиш тук грешката да игнорираш тази нула.
"SET @existRandom = (SELECT TOP 1 Numbers FROM RandomNumbers WHERE Numbers = @random AND Numbers != 0)"
И в случая не само, че ще имаш нула, ами ще имаш и неизвестен брой нули.
Решението е да генерираш число от 1 до 1000 така "SET @random = ABS(CHECKSUM(NewId())) % 1000 + 1"