Loading...
NStankov avatar NStankov 18 Точки

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

 

Тагове:
0
Module: C# DB 26/10/2016 02:01:46
DonchoPatronski avatar DonchoPatronski 35 Точки

Виж как успях да попълня числата в таблицата. Дано решението е това за което си питал!


create table RandomNumbers(
    Id int identity primary key,
    Number int
)


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)
    
    while(@rowsCount < 100)
        BEGIN
            WHILE(@isExist = 1)
             BEGIN
                SET @random = ABS(CHECKSUM(NewId())) % 100 + 1
                SET @existRandom = (SELECT TOP 1 Number FROM RandomNumbers WHERE Number = @random)
                IF(@existRandom > 0)
                 BEGIN 
                    SET @isExist = 1
                 END
                ELSE
                 BEGIN
                    SET @isExist = 0
                 END
                IF(@isExist = 0 )
                 BEGIN
                    INSERT INTO RandomNumbers(Number)
                    VALUES (@random)
                    SET @existRandom = 0
                 END
             END
            set @isExist = 1
            SET @rowsCount = (SELECT COUNT(*) AS Count FROM [dbo].[RandomNumbers] AS n)
        END
END

0
NStankov avatar NStankov 18 Точки

Въпроса ми беше защо като попълня таблицата ми излизат нули, като искам да няма.

0
DonchoPatronski avatar DonchoPatronski 35 Точки

Ето аз съм го направил без нули.
Защото това "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"

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.