SQL Server: как вставить случайные целые числа в таблицу? - PullRequest
11 голосов
/ 16 июня 2011

У меня есть такая тестовая таблица

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;

Ответы [ 4 ]

7 голосов
/ 16 июня 2011

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

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/

7 голосов
/ 16 июня 2011

С 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.

3 голосов
/ 16 июня 2011

вы можете использовать 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 голосов
/ 16 июня 2011

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

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...