Я в SQL не силен, только учусь, поэтому наверное глупый вопрос.
Есть табличка из трех колонок:
С1 (varchar(6), ключ), C2 (varchar(10)), C3(smalldatetime).
Надо добавить в таблицу 100000 строк со значениями:
С1 от 100000 до 199999,
С2 пустая строка
С3 сегодняшняя дата.
Для этого нужен цикл (если да,то как он выглядит?), или есть оператор позволяющий это сделать ?
Буду благодарен за помощь.
Здравствуйте, <Аноним>, Вы писали:
А>Я в SQL не силен, только учусь, поэтому наверное глупый вопрос. А>Есть табличка из трех колонок: А>С1 (varchar(6), ключ), C2 (varchar(10)), C3(smalldatetime).
А>Надо добавить в таблицу 100000 строк со значениями: А>С1 от 100000 до 199999, А>С2 пустая строка А>С3 сегодняшняя дата.
А>Для этого нужен цикл (если да,то как он выглядит?), или есть оператор позволяющий это сделать ? А>Буду благодарен за помощь.
Здравствуйте, <Аноним>, Вы писали:
А>Есть табличка из трех колонок: А>С1 (varchar(6), ключ), C2 (varchar(10)), C3(smalldatetime).
А>Надо добавить в таблицу 100000 строк со значениями: А>С1 от 100000 до 199999, А>С2 пустая строка А>С3 сегодняшняя дата.
А>Для этого нужен цикл (если да,то как он выглядит?), или есть оператор позволяющий это сделать ? А>Буду благодарен за помощь.
Ну все зависит от языка. Если ты пользуешься MS SQL, то можно выполнить такой скрипт:
declare @i int
set @i=100000
while @i<200000
begin
insert into table1(c1, c2, c3) values(@i, '', getdate())
end
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
А>>С1 (varchar(6), ключ), C2 (varchar(10)), C3(smalldatetime). S>Ну все зависит от языка. Если ты пользуешься MS SQL, то можно выполнить такой скрипт: S>
S>declare @i int
S>set @i=100000
S>while @i<200000
S>begin
S> insert into table1(c1, c2, c3) values(@i, '', getdate())
S>end
S>
Уважаемый начинающий, если будешь использовать этот скрипт — не забудь о преобразовании типа int в свой varchar(6):
insert into table1(c1, c2, c3) values(convert(varchar(6),@i), '', getdate())
declare @mul table (i int)
insert @mul
select 1
union all
select 2
union all
select 3
union all
select 4
union all
select 5
union all
select 6
union all
select 7
union all
select 8
union all
select 9
union all
select 0
insert table1(c1, c2, c3)
select cast(100000 + a.i + b.i *10 + c.i *100 + d.i * 1000 + e.i * 10000 as varchar(6)), '', getdate()
from @mul a
cross join @mul b
cross join @mul c
cross join @mul d
cross join @mul e
order by num
Здравствуйте, gavrilenko_s, Вы писали:
_>Можно и без.
_>select cast(100000 + a.i + b.i *10 + c.i *100 + d.i * 1000 + e.i * 10000 as varchar(6)), '', getdate() _>from @mul a _>cross join @mul b _>cross join @mul c _>cross join @mul d _>cross join @mul e _>order by num _>[/sql]
order by убрать, использовал для отладки
Здравствуйте, Mavus, Вы писали:
А>>>С1 (varchar(6), ключ), C2 (varchar(10)), C3(smalldatetime). S>>Ну все зависит от языка. Если ты пользуешься MS SQL, то можно выполнить такой скрипт: S>>
S>>declare @i int
S>>set @i=100000
S>>while @i<200000
S>>begin
S>> insert into table1(c1, c2, c3) values(@i, '', getdate())
S>>end
S>>
M>Уважаемый начинающий, если будешь использовать этот скрипт — не забудь о преобразовании типа int в свой varchar(6): M>
M>insert into table1(c1, c2, c3) values(convert(varchar(6),@i), '', getdate())
M>
Здравствуйте, gavrilenko_s, Вы писали:
по-настоящему красивый способ — использовать степени двойки, а не десятки. и на каждом шаге получать новый запрос с количеством строк, возведённым в квадрат путём авто-join-а предыдущего запроса. я привёл не реальные запросы, а идею:
create view s<i+1> (x) as
select s1.x + s2.x * (2^i) from s<i> as s1, s<i> as s2
каждый view s<i> имеет 2^(2^i) строк
начинаем с s0, в котором 2 строки:
create view s0 (x) as
select 0 union all select 1
для того, чтобы сгенерировать i=5: 2^(2^i) = 2^(2^5) = 2^32 ~ 4 миллиарда строк, достаточно всего лишь i+1 = 5+1 = 6 запросов.