powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сгенерировать тестовые данные? каждое следующее число больше на 1~20 от предыдущего
3 сообщений из 3, страница 1 из 1
Как сгенерировать тестовые данные? каждое следующее число больше на 1~20 от предыдущего
    #39845120
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сгенерировать столбец чисел, чтобы каждое следующее было на [от 1 до 20] больше предыдущего.

В голову пришла пока только такая идея (пару пояснений в комментарях дам):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
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


Но есть очевидный минус - никаких гарантий о том, что следующее число будет в каком-то предсказуемом диапазоне.
Есть второй - очень много холостых циклов. Для генерации тестовых данных в миллиард строк окончания цикла в этой жизни не дождаться. Просто перебираем пару десятков чисел только для того, чтобы для каждого решить, что выводить мы их не будем.
...
Рейтинг: 0 / 0
Как сгенерировать тестовые данные? каждое следующее число больше на 1~20 от предыдущего
    #39845129
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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);
...
Рейтинг: 0 / 0
Как сгенерировать тестовые данные? каждое следующее число больше на 1~20 от предыдущего
    #39845187
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рекурсия, точно!
спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сгенерировать тестовые данные? каждое следующее число больше на 1~20 от предыдущего
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]