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
.
Ответ 3
Это также сделано выше
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/
Ответ 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;