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

у меня есть тестовая таблица, как этот

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

каковы различные методы в SQL Server для вставки случайных целых чисел в эту таблицу (e.g для 1000 строк). В то время как loop, cross join или что?

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

DECLARE @val AS INT = 1;

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

SELECT *
FROM   #temp;

4 ответов


можно использовать 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

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


С SQL SERVER-скрипт генератора случайных чисел:

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

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


Это сделано выше

Insert Into @t
Select Cast(rand(checksum(newid()))*1000000  as int)
go 1000

см. эту ссылку : https://www.mssqltips.com/sqlservertip/1467/populate-a-sql-server-column-with-a-sequential-number-not-using-an-identity/


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

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;