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

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

insert into [D7, MSSQL]


сергей1 ©   (2004-08-12 11:30:00) 

есть такой вопрос :

этот запрос переписывает все данные из таблицы Table1 в Table2 :

insert into Table2 select * from Table1

каким образом подменить часть столбцов другой информацией, т.е. например
в последний столбец подставить другие данные
запрос типа этого неработает

insert into Table2 values
(
(select field1 from Table1),
'another_data'
)


сергей1   (2004-08-12 15:36:00) [1]

твой вариант как у Соловьева и у меня в топике, он к сожалению не работает, Nikolay дал правильный вариант


Ega23   (2004-08-12 14:55:00) [2]

insert into Table2(f1, f2)
values ((Select f1 from Table2), (select f2 from Table1 where f1=a1)


сергей1   (2004-08-12 14:39:00) [3]

может я неверно описал ситуацию, но нормализация здесь тоже непричем, есть таблица :

f1 | f2
--------
a1 | 5
b1 | 6
c1 | 3
d1 | 8

сюда надо добавить несколько новых строк, где f1 берется из другой таблицы по определенным критериям,
а поле f2 дублируется от строки а1

f1 | f2
--------
a1 | 5
b1 | 6
c1 | 3
d1 | 8
x1 | 5
y1 | 5
z1 | 5


Ega23   (2004-08-12 13:16:00) [4]

причем первый столбец берется из одной таблицы

Именно это и называется нормализацией БД, когда вместо дублирования стринговых полей используется вторичный ключ. Зачем дублировать информацию, если у тебя уже в одной таблице есть это поле?


сергей1   (2004-08-12 13:11:00) [5]

>Nikolay M. ©
sorry, я твой вариант не заметил, моя реплика была к Соловьеву, а твой вариант как раз рабочий спасибо.

>46_55_41_44 ©
через дельфи неохота, это медленней, я хочу это через ХП сделать

>Ega23 ©
причем тут вообще FK, речь идет не о контроле ввода, а о том, что требуется добавить в таблицу сразу несколько новых записей, причем первый столбец берется из одной таблицы, а в остальные нужно вписать заданную информацию


Ega23   (2004-08-12 12:45:00) [6]

сергей1   (12.08.04 12:07) [5]

Гы-гы-гы! Я так и знал, что это нафиг не нужно! А Foreign Keyтебе о чём-нибудь говорит?


46_55_41_44   (2004-08-12 12:31:00) [7]

тогда лучше сделать через дельфяк...
С помощью Insert Into Table2 (Field1, Field2, ..., FieldN)
Values
(Value1, Value2, ..., ValueN)
Где Value1..N могут быть данные полей Field1..FieldN таблицы Table1либо любые другие данные!

Отрицательная сторона этого способа в том, что придется N раз ExecSql давать!!! То есть выполнять запрос!


Nikolay M.   (2004-08-12 12:16:00) [8]


> сергей1   (12.08.04 12:07) [5]
> нет, не катит, выдает ту-же ошибку :
>
> Subqueries are not allowed in this context.

Кого куда не катит? [2] - работающий вариант.


сергей1   (2004-08-12 12:07:00) [9]

нет, не катит, выдает ту-же ошибку :

Subqueries are not allowed in this context.

а нужно это для следующего :

есть 2 таблицы, одна со списком деталей [Деталь], другая с технологией к каждой детали [Технология],
деталь может иметь несколько вариантов с немного разными названиями, например det, det-1, det-2, det-3.
Вот те варианты, которые с черточками, должны иметь ту-же технологию, что и det. Я выбираю запросом такие
детали из первой таблицы, а теперь хочу их вставить во вторую таблицу, но с данными относящимися к det.

>Nikolay M.
при чем тут case ?

вроде как курсорами можно решить, но неужели SQL сам не позволяет такое делать ?


Nikolay M.   (2004-08-12 11:50:00) [10]


> Ega23 ©   (12.08.04 11:37) [3]

Имхо, скоро выяснятся "нюансы", которые потребуют разжевывания, что такое CASE...WHEN :)


Ega23   (2004-08-12 11:37:00) [11]

Я к варианту [2] склоняюсь.
Дурацкий вопрос: а нафига?


Соловьев   (2004-08-12 11:33:00) [12]

может так?
insert into Table2(field1, field2) values
(
(select field1 from Table1),
'another_data'
)


Nikolay M.   (2004-08-12 11:33:00) [13]


> insert into Table2 values
> (
> (select field1 from Table1),
> 'another_data'
> )

insert into Table2
select field1, 'another_data' from Table1
?


Наверх

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