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

как это лучше сделать?
while?
http://msdn.microsoft.com/ru-ru/library/ms178642.aspx
1 окт 13, 20:16    [14909160]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
Crimean
Member

Откуда:
Сообщений: 13148
select a1.no * 10 + a2.no
from
( select 0 as no union all select 1 union all select 2 union all select 3  ... ) as a1
cross join
( select 0 as no union all select 1 union all select 2 union all select 3  ... ) as a2
1 окт 13, 20:19    [14909171]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
локнес
Guest
Crimean,

плохой запрос ) не масштабируемый ))
1 окт 13, 20:32    [14909202]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
локнес
нужно сгенерировать список от 1 до 100
как это лучше сделать?


Завести себе табличку Number от 1 до N...
1 окт 13, 20:37    [14909216]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
uaggster
Member

Откуда:
Сообщений: 867
локнес,
Ну...
With s as (Select num from (values (0), (1), (2),(3),(4),(5),(6),(7),(8),(9) as t(num))
Select top 100 a.num+b.num*10 num
From s a cross join s b
Order by 1

Как то так...
1 окт 13, 20:55    [14909256]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
uaggster
Member

Откуда:
Сообщений: 867
В CTE скобку забыл. И алиас, кажется. Пардон.
1 окт 13, 20:57    [14909263]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
локнес
Guest
uaggster,

With s as (
Select num from (values (0), (1), (2),(3),(4),(5),(6),(7),(8),(9)) as t(num)
)

Select a.num+b.num*10 num
From s a cross join s b
Order by 1

переписал ))

тоже не маштабируемый )))
1 окт 13, 21:21    [14909326]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
uaggster
Member

Откуда:
Сообщений: 867
локнес, аналогичный выше приведенному с union, просто синтаксис новый.

Почему не масштабируемый?
...
Select top xxxxx a.num*1000000+...
From s a, s b, s c, s d, s e, s f
Order by 1
1 окт 13, 21:39    [14909365]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
локнес
тоже не маштабируемый )))


Требования к "масштабируемости" м.б. уже озвучите?
1 окт 13, 21:43    [14909377]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
andy st
Member

Откуда:
Сообщений: 800
pkarklin, да как пить дать до max bigint
1 окт 13, 21:50    [14909401]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
локнес
Guest
pkarklin,

от 0 до 1000000000


uaggster,
0
1
2
3
4
5
6
7
8
9
100000
1 окт 13, 22:03    [14909446]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
локнес
от 0 до 1000000000


Ну так создайте такую таблицу. Враз и навсегда.
1 окт 13, 22:09    [14909460]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
локнес
Guest
pkarklin,

так я и хотел создать ее одним красивым циклом от 0 до 10000000000
1 окт 13, 22:11    [14909465]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
uaggster
Member

Откуда:
Сообщений: 867
локнес
pkarklin,

от 0 до 1000000000


uaggster,
0
1
2
3
4
5
6
7
8
9
100000


Не понял, что ты хотел сказать.
1 окт 13, 22:19    [14909496]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
Speshuric
Member

Откуда: г. Москва
Сообщений: 129
declare @start bigint, @len bigint, @quant bigint;
set @start = 0;
set @len = 1000000;
set @quant = 2;
create table #tmp 
(
   id bigint not null primary key,
   somedata nvarchar(100) not null
);

with recursive_builder(id) as
(select 1 id -- это и есть просто генерация списка интов
union all select 2*r.id + 1 from recursive_builder r where 2*r.id + 1 <= @len
union all select 2*r.id from recursive_builder r where 2*r.id <= @len)
-- две ветки, только чтобы maxrecursion не трогать, по производительности аналогично "однопоточному"
insert #tmp (id, somedata) select @start + (id-1)*quant, NEWID() from recursive_builder r;
1 окт 13, 22:24    [14909508]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
локнес
так я и хотел создать ее одним красивым циклом от 0 до 10000000000


Одноразовое заполнение может быть совсем не красивым.
1 окт 13, 22:33    [14909534]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
create table #num(N int not null identity(1,1),val varchar(1))
insert into #num(val) values('')
GO
insert into #num (val) select val from #num
GO 20 

select count(*) from #num
drop table #num
2 окт 13, 08:04    [14910080]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
локнес,
declare @start as int, @end as int, @step as int
set @start = 1;
set @end = 100;
set @step = 1;

with cal as
(
 select @start as n
 union all
 select
  n+@step
 from
  cal
 where
  n+@step<= @end
)
select
 cal.n
from
 cal
 option
 (maxrecursion 0);


Как-то так
2 окт 13, 08:59    [14910173]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
Гость333
Member

Откуда:
Сообщений: 3683
локнес
так я и хотел создать ее одним красивым циклом от 0 до 10000000000

Создайте, конечно. Сравните с другими предложенными методами. Получите хороший опыт.
2 окт 13, 09:40    [14910319]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
plombir86
Member

Откуда:
Сообщений: 15
CREATE TABLE Numbers(id bigint not null)
GO
INSERT INTO Numbers WITH (TABLOCK)
SELECT TOP 10000000 row_number()OVER(ORDER BY A.number) AS id FROM master.dbo.[spt_values] as A
cross join master.dbo.[spt_values] AS B
cross join master.dbo.[spt_values] AS C
WHERE A.type = 'p'

правда занимать места данная таблица будет огого))
2 окт 13, 09:47    [14910353]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
Гость333
Member

Откуда:
Сообщений: 3683
plombir86
правда занимать места данная таблица будет огого))

164 мегабайта — это "огого"? Ну, сочувствую, если приходится такие объёмы экономить, бегите с такой работы быстрее :-)

Ну и, в таком виде эта таблица бесполезна чуть менее, чем полностью.
Должно быть так:
CREATE TABLE Numbers(id bigint not null primary key)

Размер увеличится на полмегабайта, увеличение пользы — бесценно.
2 окт 13, 10:01    [14910429]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
plombir86
Member

Откуда:
Сообщений: 15
в исходном скрипте пару ноликов забыл)
ТС требовалось именно 1000000000 rows
а тут уже не какие то мегабайты
2 окт 13, 10:16    [14910553]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
Гость333
Member

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

ТС путается в показаниях :)
Здесь 14909446 ему надо 1000000000 (1 млрд.) записей.
Здесь 14909465 — уже 10000000000 (10 млрд.).
Занимать 16 Гб подобной ахинеей (для случая 1 млрд.), конечно, вряд ли разумно. А тем более 160 Гб.
2 окт 13, 10:31    [14910662]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
plombir86
в исходном скрипте пару ноликов забыл)
ТС требовалось именно 1000000000 rows
а тут уже не какие то мегабайты


ТС!
Тебе ключевой вопрос - ЗАЧЕМ ТЕБЕ ЭТО НАДО???
Цель какая?
2 окт 13, 11:20    [14911006]     Ответить | Цитировать Сообщить модератору
 Re: секундный вопрос )  [new]
локнес
Guest
AxuliON,
Всем спасибо!
Вопрос чисто академический :)

Хотел быстро написать цикл от 1 до 10000, конечное число не важно.
и в конце print

А все через временные таблицы делают
2 окт 13, 11:23    [14911038]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить