Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как заполнить таблицу числами от 1 до 80?


kreyl ©   (2005-08-04 09:58:00) 

Таблица с одним столбцом целых. Как ее заполнить числами от 1 до 80 - при помощи запроса, конечно, а не построчно?
Простите за чайницкий вопрос :-) Спасибо!


EthernalWonderer   (2005-08-05 23:18:00) [1]

А вот решение для Oracle:

Insert Into MyTable Select RowNum From All_Objects Where RowNum < 81


AndrewK   (2005-08-04 17:05:00) [2]

Ну вот решение для MS SQL Server 2000. Думаю идею можно переложить и на други движки.

Делаем функцию:


CREATE FUNCTION IntListGet (@Start int, @Stop int)
RETURNS @Return TABLE (Value int)
AS
BEGIN
 declare @i int
 set @i=@Start
 while @i<=@Stop
 begin
   insert @Return select @i
   set @i=@i+1
 end
 RETURN
END


Поучаем нужный датасет:


select
*
from
dbo.IntListGet (1, 80)


Sergey13   (2005-08-04 12:38:00) [3]

2 [8] Ольга   (04.08.05 12:33)
> Не стоит овчинка выделки
Для такой задачи программу (или запрос) писать - вообще нонсенс. Тем более если не знаешь как. 8-)


Ольга   (2005-08-04 12:33:00) [4]


> [7]

Не стоит овчинка выделки, разве что сеть у kreyl совсем дохлая, а так и тот и другой вариант будут работать одинаково быстро.


Sergey13   (2005-08-04 11:57:00) [5]

2[6] Ольга   (04.08.05 11:51)
Зато команда серверу передастся всего 1 раз.


Ольга   (2005-08-04 11:51:00) [6]


> при помощи запроса, конечно, а не построчно

Как не извращайся, а сервер все равно будет делать это построчно.
Так что for i:=1 to 80 do insert... самый лучший вариант.


ЮЮ   (2005-08-04 11:48:00) [7]

>Zz_   (04.08.05 11:44) [4]

А вдруг это LocalSQL ?


Zz_   (2005-08-04 11:44:00) [8]


declare @t table (A int)
insert into @t select 1 + A*25+B*5+C from
(select A = 0 union all select 1 union all select 2 union all select 3 union all select 4)a,
(select B = 0 union all select 1 union all select 2 union all select 3 union all select 4)b,
(select C = 0 union all select 1 union all select 2 union all select 3 union all select 4)c
where A*25+B*5+C < 80

select * from @t order by 1


ЮЮ   (2005-08-04 10:07:00) [9]

DELETE FROM MyTable
INSERT INTO MyTable
 SELECT Num FROM MySuperTable WHERE Num BETWEEN 1 AND 80

если движок поддерживает, можно одним оператором

SELECT Num FROM MySuperTable WHERE Num BETWEEN 1 AND 80
 INTO MyTable

где
 MySuperTable - заранее приготовленная таблица с одни столбцом, куда ПОСТРОЧНО (нет другого пути) добавлены записи от 1 до максимального в твоей области применения


evvcom   (2005-08-04 10:04:00) [10]


> при помощи запроса, конечно, а не построчно?

insert into MyTable (
 select 1 from dual
 union
 select 2 from dual
 union
 <и так 80 раз :)>
 select 80 from dual);

:-))


ЮЮ   (2005-08-04 09:59:00) [11]

>Таблица с одним столбцом целых
:)

А строки в ней уже есть?


Наверх

Титульная страница Поиск, карта сайта Написать письмо