Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сгенерировать тестовые данные? каждое следующее число больше на 1~20 от предыдущего  [new]
Nika gnome
Member

Откуда:
Сообщений: 588
Хочу сгенерировать столбец чисел, чтобы каждое следующее было на [от 1 до 20] больше предыдущего.

В голову пришла пока только такая идея (пару пояснений в комментарях дам):
declare @tempt table(v int)
insert into @tempt values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)

select *
from
(
	select top 1000 --без "топ 1000" не будет работать функция NEWID
		ROW_NUMBER() over (order by t1.v, t2.v, t3.v) id  --генерирую для сортировки
	, t1.V*100 + t2.v*10 + t3.v v --само число
	, ABS(CHECKSUM(NEWID())) % 10 isactive --генерируем случайное число от 0 до 9
	from @tempt t1 cross join @tempt t2 cross join @tempt t3
) t
where isactive =1 --если сгенерированное выше число - 1, то на вывод

order by id

Но есть очевидный минус - никаких гарантий о том, что следующее число будет в каком-то предсказуемом диапазоне.
Есть второй - очень много холостых циклов. Для генерации тестовых данных в миллиард строк окончания цикла в этой жизни не дождаться. Просто перебираем пару десятков чисел только для того, чтобы для каждого решить, что выводить мы их не будем.
4 авг 19, 17:00    [21941601]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать тестовые данные? каждое следующее число больше на 1~20 от предыдущего  [new]
invm
Member

Откуда: Москва
Сообщений: 9351
declare @n int = 1000;

with t as
(
 select cast(rand(checksum(newid())) * 20 + 1 as int) as n

 union  all

 select
  t.n + cast(rand(checksum(newid())) * 20 + 1 as int)
 from
  t
)
select top (@n)
 n
from
 t
option
 (maxrecursion 0);
4 авг 19, 17:35    [21941616]     Ответить | Цитировать Сообщить модератору
 Re: Как сгенерировать тестовые данные? каждое следующее число больше на 1~20 от предыдущего  [new]
Nika gnome
Member

Откуда:
Сообщений: 588
рекурсия, точно!
спасибо!
4 авг 19, 21:19    [21941706]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить