SQL Server: как вставить случайные целые числа в таблицу?

У меня есть тестовая таблица, подобная этой

CREATE TABLE #temp (
    rid INT IDENTITY (1, 1) NOT NULL,
    val INT NULL,
    CONSTRAINT pk_temp_rid PRIMARY KEY (rid)
);

Каковы различные методы в SQL Server для вставки случайных целых чисел в эту таблицу (например, для 1000 строк). Пока цикл, перекрестное соединение или что?

Я пробовал это, но результат неверен

DECLARE @val AS INT = 1;

WHILE @val <= 1000
    BEGIN
        INSERT #temp (val)
        SELECT RAND(@val);
        SET @val = @val + 1;
    END

SELECT *
FROM   #temp;

Ответ 1

вы можете использовать select CAST(RAND() * 1000000 AS INT) AS [RandomNumber] для генерации или выбора случайных целых чисел. поэтому полный запрос будет примерно таким:

    DECLARE @t TABLE( randnum float )
DECLARE @cnt INT; SET @cnt = 0
WHILE @cnt <=10000
BEGIN
SET @cnt = @cnt + 1
INSERT INTO @t
SELECT RAND( (DATEPART(mm, GETDATE()) * 100000 )
+ (DATEPART(ss, GETDATE()) * 1000 )
+ DATEPART(ms, GETDATE()) )
END
SELECT randnum, COUNT(*)
FROM @t
GROUP BY randnum

С уважением..

Ответ 2

Из SQL SERVER - Генератор случайных чисел Script:

SELECT randomNumber, COUNT(1) countOfRandomNumber
FROM (SELECT ABS(CAST(NEWID() AS binary(6)) % 1000) + 1 randomNumber
      FROM sysobjects) sample
GROUP BY randomNumber;

EDIT. Чтобы уточнить, script группирует случайное число, которое было сгенерировано для каждой строки. Таким образом, общее количество результатов не гарантируется. Вы можете быть уверены, что никогда не получите больше строк, чем SELECT COUNT(*) FROM sysobjects.

Ответ 4

Я думаю, что "пока будет работать. Вы очень близки.

DECLARE @val AS INT = 1;

WHILE @val <= 1000
BEGIN
    INSERT #temp (val)
    SELECT cast((RAND()*1000) as int);
    SET @val = @val + 1;
END

SELECT *
FROM   #temp;