Генериране на 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"