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

Откуда:
Сообщений: 42
Всем доброе времени суток!

Хочу разобраться в создании тестовых данных для тестовой базы.
Предположим нужно:

1. Сгенерировать 100 пользователей (бессвязный набор букв Ыфдывл, Хрыва, Фщыывфжыдв);
2. Добавить случайные числа от 0 до 1000 каждому пользователю;
3. Добавить всем случайные номера телефонов вида 7xxxxxxxxxx

Потратив много времени, через поиск подробных ответов с объяснениями не нашел.

Для 2-го пункта думаю подойдет

declare @i int =0
while @i<10
begin
select CEILING(RAND()*10)
set @i=@i+1
end

Вопрос:
Может кто знает хорошую статью по этой теме с подробным описанием?
Примеры генераторов (просьба с объяснениями).

Заранее благодарю.
5 ноя 17, 22:50    [20929127]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
VinniL
Всем доброе времени суток!

Хочу разобраться в создании тестовых данных для тестовой базы.
Предположим нужно:

1. Сгенерировать 100 пользователей (бессвязный набор букв Ыфдывл, Хрыва, Фщыывфжыдв);
2. Добавить случайные числа от 0 до 1000 каждому пользователю;
3. Добавить всем случайные номера телефонов вида 7xxxxxxxxxx

Потратив много времени, через поиск подробных ответов с объяснениями не нашел.

Для 2-го пункта думаю подойдет

declare @i int =0
while @i<10
begin
select CEILING(RAND()*10)
set @i=@i+1
end

Вопрос:
Может кто знает хорошую статью по этой теме с подробным описанием?
Примеры генераторов (просьба с объяснениями).

Заранее благодарю.

Читайте блог Сергея Олоненцева, у него потрясающая статья по генерации разных типов и новой возможности из SQL 2016.
Совместить приятное с полезным
5 ноя 17, 23:02    [20929160]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
VinniL,
А вот статья в этом же разделе про генерацию паролей
5 ноя 17, 23:03    [20929165]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
VinniL
Member

Откуда:
Сообщений: 42
Andy_OLAP , спасибо, буду читать.
5 ноя 17, 23:07    [20929178]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
Rankatan
Member

Откуда:
Сообщений: 250
вот тут примеры есть

Генерация уникальных случайных кодов

Генерация фамилий и отчеств SQL
6 ноя 17, 00:23    [20929318]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
_human
Member

Откуда:
Сообщений: 560
VinniL,

1)

;with nums(n) as
(
	select row_number() over(order by (select null))
	from master..spt_values c1
)

select  
replace(
		(select top 10 char(n) as [data()]
		from nums
		where char(n) LIKE '[A-Za-z]'
		order by newid() 
		for xml path(''))
	, ' ', '') AS [FirstName]
,replace(
		(select top 15 char(n) as [data()]
		from nums
		where char(n) LIKE '[A-Za-z]'
		order by newid() 
		for xml path(''))
	, ' ', '') AS [MiddleName]
,replace(
		(select top 10 char(n) as [data()]
		from nums
		where char(n) LIKE '[A-Za-z]'
		order by newid() 
		for xml path(''))
	, ' ', '') AS [LastName]
6 ноя 17, 15:12    [20930086]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
_human
Member

Откуда:
Сообщений: 560
VinniL,

;with nums(n) as
(
	select row_number() over(order by (select null))
	from master..spt_values c1
)


select top 100 n, ca.Name1, ca.Name2, ca.Name3, ca.r_num, ca.phone
from nums n
cross apply (

	select  
	replace(
			(select top (n%1 + 10) char(n) as [data()]
			from nums
			where char(n) LIKE '[A-Za-z]'
			order by (select newid())
			for xml path(''))
		, ' ', '') AS [Name1]
	,replace(
			(select top (n%1 + 15) char(n) as [data()]
			from nums
			where char(n) LIKE '[A-Za-z]'
			order by (select newid())
			for xml path(''))
		, ' ', '') AS [Name2]
	,replace(
			(select top (n%1 + 10) char(n) as [data()]
			from nums
			where char(n) LIKE '[A-Za-z]'
			order by (select newid())
			for xml path(''))
		, ' ', '') AS [Name3]
	, left(concat(7, abs(checksum(newid())), '000'), 10) as phone
	, abs(checksum(newid())/10000000) as r_num
) ca
6 ноя 17, 16:50    [20930269]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
VinniL
Member

Откуда:
Сообщений: 42
_human, Мои благодарности!
6 ноя 17, 17:16    [20930324]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
VinniL
Member

Откуда:
Сообщений: 42
Супер, спасибо! Почти разобрался.

Остался один мучающий меня вопрос.

Вставка данных в поле Foreign Key, то есть вставить случайные данные от 1 до 1000 в поле, которое является Reference?
6 ноя 17, 17:21    [20930336]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
VinniL
Member

Откуда:
Сообщений: 42
Более подробно.
1.Например у меня есть таблица Customers, в ней 100 пользователей (Primery Key). Эта таблица является Foreign Key таблицы Orders.
И нужно добавить 1000 рандомных заказов в таблицу Orders..
2.Дополнительный вопрос: если несколько внешних ключей, как каждый из них обыграть?
6 ноя 17, 17:25    [20930342]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
VinniL
Вставка данных в поле Foreign Key, то есть вставить случайные данные от 1 до 1000 в поле, которое является Reference?
Например у меня есть таблица Customers, в ней 100 пользователей (Primery Key). Эта таблица является Foreign Key таблицы Orders.
И нужно добавить 1000 рандомных заказов в таблицу Orders..
Тогда нужно не генерить случайные числа, а выбирать случайные записи из таблицы Customers
Например, select top 1 CustomerId from Customers order by new_id()
6 ноя 17, 18:32    [20930457]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
VinniL
Member

Откуда:
Сообщений: 42
Не совсем понимаю.
Если я делаю

SELECT TOP 10
[colum1],
[colum2],
(select top 1 CustomerId from Customers order by newid()) as [colum3]

В третьей колонке мне возвращает 10 одинаковых значений из таблицы Customers (значение каждый раз разное, это хорошо).
Но как сделать, чтобы возвращалось 10 разных значений?
6 ноя 17, 19:32    [20930608]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
VinniL
Не совсем понимаю.
Если я делаю

SELECT TOP 10
[colum1],
[colum2],
(select top 1 CustomerId from Customers order by newid()) as [colum3]

В третьей колонке мне возвращает 10 одинаковых значений из таблицы Customers (значение каждый раз разное, это хорошо).
Но как сделать, чтобы возвращалось 10 разных значений?
select c.id, c.name, (select top 1 o.id from sysobjects o where c.id > 0 order by newid())
from syscolumns as c
6 ноя 17, 21:14    [20930774]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
VinniL
Member

Откуда:
Сообщений: 42
alexeyvg,

Спасибо. Посмотрю этот вариант.
Сам решил сделать следующее

SELECT TOP 10
[colum1],
[colum2],
[colum3]

from Customers
CROSS APPLY
(select top 1 CustomerId from Customers order by newid()) as [colum3]
6 ноя 17, 21:26    [20930790]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
VinniL
Сам решил сделать следующее
И что, работает???
Нужна корреляция подзапроса с базовой таблицей. У меня в варианте с CROSS APPLY оптимизатор тоже выполняет подзапрос 1 раз :-)
Лучше не рисковать, и обеспечить корреляцию включением условия и полем базовой таблицы, например с CROSS APPLY:
SELECT TOP 10 
    [colum1],
    [colum2],
    [colum3]
from Customers
    CROSS APPLY
       (select top 1 CustomerId from Customers where [colum1] > 0 order by newid()) as [colum3]
6 ноя 17, 21:33    [20930802]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
alexeyvg
VinniL
Сам решил сделать следующее
И что, работает???
Нужна корреляция подзапроса с базовой таблицей. У меня в варианте с CROSS APPLY оптимизатор тоже выполняет подзапрос 1 раз :-)
Лучше не рисковать, и обеспечить корреляцию включением условия и полем базовой таблицы, например с CROSS APPLY:
SELECT TOP 10 
    [colum1],
    [colum2],
    [colum3]
from Customers
    CROSS APPLY
       (select top 1 CustomerId from Customers where [colum1] > 0 order by newid()) as [colum3]

указав таблицы, конечно (вообще алиасы полезно писать всегда)
SELECT TOP 10 
    c1.[colum1],
    c1.[colum2],
    c1.[colum3]
from Customers c1
    CROSS APPLY
       (select top 1 c2.CustomerId from Customers c2 where c1.[colum1] > 0 order by newid()) as [colum3]
6 ноя 17, 21:35    [20930807]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
VinniL
Member

Откуда:
Сообщений: 42
alexeyvg,

Божественно!
Теперь я понял. почему срабатывало через раз))
Теперь работает каждый раз
6 ноя 17, 21:42    [20930825]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать числовой и буквенный генераторы? Где найти статью или описание?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Andy_OLAP
Читайте блог Сергея Олоненцева, у него потрясающая статья по генерации разных типов и новой возможности из SQL 2016.
Совместить приятное с полезным
А причем тут Data Masking?
7 ноя 17, 04:05    [20931181]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить