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

К примеру вывести 1000 строк с цифрой 1.
26 май 11, 17:22    [10715087]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Возможно.
26 май 11, 17:24    [10715105]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
птицабублик
Guest
Как? :)
26 май 11, 17:25    [10715110]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
select n=1 union all
--... и так еще 998 раз
select n=1
:-)
26 май 11, 17:27    [10715130]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
птицабублик,

999 UNION ALL :))
26 май 11, 17:28    [10715133]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Prolog
select n=1 union all
--... и так еще 998 раз
select n=1
:-)
998 маловато будет!
26 май 11, 17:28    [10715138]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
iap, 998 + 2 = 1000
26 май 11, 17:29    [10715146]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
iljy
Member

Откуда:
Сообщений: 8711
птицабублик,

select top 1000 1 
from sys.objects t1, sys.objects t2, sys.objects t3
26 май 11, 17:30    [10715149]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
SELECT TOP 1000 1 FROM master.dbo.spt_values;
26 май 11, 17:30    [10715153]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
птицабублик
Guest
Этот способ известен, но извращён) А если нужно будет 10000 строк, то тогда вообще с ума сойдешь копипастить :)

Хотелось бы что-нибудь вроде SELECT с какой-нибудь хитрой конструкцией, которая сама с собой сджойнится 1000 раз :)

Тогда сделаю через цикл)
26 май 11, 17:30    [10715159]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
;with c as ( select t.n from ( values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9) ) t(n) )
select top 1000
    1
from        c   a
cross join  c   b
cross join  c   d

26 май 11, 17:32    [10715172]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Чо-то сегодня не успеваю всё время!
WITH CTE(N)AS(SELECT 1 UNION ALL SELECT N+1 FROM CTE WHERE N<1000)
SELECT * FROM CTE OPTION(MAXRECURSION 0);
26 май 11, 17:33    [10715184]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Опечатка
iap
Чо-то сегодня не успеваю всё время!
WITH CTE(N)AS(SELECT 1 UNION ALL SELECT N+1 FROM CTE WHERE N<1000)
SELECT 1 FROM CTE OPTION(MAXRECURSION 0);
26 май 11, 17:34    [10715190]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Правда, рекурсивное CTE - в своём роде тоже цикл...
26 май 11, 17:34    [10715196]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
птицабублик
Guest
Всем спасибо! Не знал методы с CTE :)

А вариант Сергей Алексеевич, не работает. ругается на VALUES.
26 май 11, 17:54    [10715359]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
птицабублик
А вариант Сергей Алексеевич, не работает. ругается на VALUES.
Значит, у вас сервер неправильной версии.
26 май 11, 17:54    [10715363]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
kakoj_vopros_takoj_otvet
Guest
select 1
go 1000
26 май 11, 17:59    [10715401]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
s.w.a.n.
Member

Откуда: Москва
Сообщений: 137
без цикла, без таблиц
(наверно я тут самый тупой)
select 1
from
(
select 1 n union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10
) a1
cross join 
(
select 1 n union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10
) a2
cross join 
(
select 1 n union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10
) a3
26 май 11, 18:19    [10715522]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
s.w.a.n.
Member

Откуда: Москва
Сообщений: 137
s.w.a.n.
без цикла, без таблиц
(наверно я тут самый тупой)

мда уж точно тупой.... N=1000000...0 записей так точно запаришься выводить (
26 май 11, 18:25    [10715543]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
s.w.a.n.
s.w.a.n.
без цикла, без таблиц
(наверно я тут самый тупой)

мда уж точно тупой.... N=1000000...0 записей так точно запаришься выводить (

s.w.a.n., не проблема, чуть копипасты и все будет:
SELECT t.a FROM (
select a=1
from
(
select 1 n union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10
) a1
CROSS JOIN
(
select 1 n union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10
) a2
CROSS JOIN
(
select 1 n union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10
) a3
) t CROSS JOIN (
select a=1
from
(
select 1 n union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10
) a1
CROSS JOIN
(
select 1 n union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10
) a2
CROSS JOIN
(
select 1 n union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10
) a3
) t1
26 май 11, 21:32    [10716065]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3422
select top (1000000) 1
from master.dbo.spt_values, master.dbo.spt_values;
26 май 11, 22:52    [10716368]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8880
Ennor Tiegael
select top (1000000) 1
from master.dbo.spt_values, master.dbo.spt_values;

Хм... у мну там 2508 записев. Т.о, можно получить "всего-то" 6290064 строк
PS Ну и это, псевдоним ещё нужно хоть раз использовать.
26 май 11, 23:50    [10716539]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
SIMPLicity_, кстати да, согласен.
Если завязаться на какую-нить таблицу, то можно получить злобный, труднопонимаемый глюк. Для примера, конечно, использовать master..spt_values можно, когда писать лень и нужно че-нить продемонстрировать по-быстрому. Но в боевых условиях нужно использовать только предварительно сделанную таблицу чисел (вариант предпочтительней) или честную генерацию. По крайней мере у себя даже триггер повесил, который при попытках модификации таблицы чисел все популярно объясняет)))), а то мало ли, найдутся умельцы.
27 май 11, 00:08    [10716564]     Ответить | Цитировать Сообщить модератору
 Re: Как искуственно создать N одинаковых записей ?  [new]
Ennor Tiegael
Member

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

Про алиас тупо забыл. А в остальном - ну так пример же, да и на миллион хватает.
У меня в базе таблица-секвенсор на 32к, больше пока не требовалось.
27 май 11, 02:31    [10716739]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить