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

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

Зарезервировать ключ перед вставкой [D7, MSSQL]


Страницы:   1 2

TADOCommand ©   (2008-04-23 13:53:00) 

Подскажите как элегантнее поступить в ситуации:

Требуется сделать по инсерту в две таблицы.
Первый инсерт должен породить уникальный целочисленный ключ, который потом должен быть использован во втором инсерте. (связь один к одному в общем);

PS MSSQL2005


ANB   (2008-04-24 14:27:00) [1]


> Ega23 ©   (23.04.08 17:14) [20]
>
> > А почему нельзя в одной команде сделать 2 инсерта, не
> доставая
> > ИД на клиента ?
>
>
> Кто сказал, что нельзя? Ты ветку-то прочитал?

Невнимательно.


> TADOCommand   (23.04.08 17:15) [21]
> на клиенте он нужен так как мне его надо тут же отдать во
> внешнюю систему.

Тогда понятно. См. советы Ega23.


TADOCommand   (2008-04-23 17:15:00) [2]

на клиенте он нужен так как мне его надо тут же отдать во внешнюю систему.


Ega23   (2008-04-23 17:14:00) [3]


> А почему нельзя в одной команде сделать 2 инсерта, не доставая
> ИД на клиента ?


Кто сказал, что нельзя? Ты ветку-то прочитал?


ANB   (2008-04-23 17:10:00) [4]

А почему нельзя в одной команде сделать 2 инсерта, не доставая ИД на клиента ?


Ega23   (2008-04-23 17:06:00) [5]


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


Старая привычка.


sniknik   (2008-04-23 17:04:00) [6]

> Можно, только "нафига козе баян?"  :)
не знаю, это ты предлагал значение в рекордсете получать. я бы сделал через аутпут параметр.


Ega23   (2008-04-23 17:01:00) [7]


> вернее, и с Execute тоже можно, просто чуть больше с ним
> "телодвижений" чем с open.


Можно, только "нафига козе баян?"  :)


Ega23   (2008-04-23 17:00:00) [8]


> sniknik ©   (23.04.08 16:58) [11]
>
> > Скрипт из [6] без финального select можно одним блоком
> Execute выполнить.
> с финальным тоже, только с open.
>


Не, ну у автора же ник TADOCommand...  :)))


sniknik   (2008-04-23 17:00:00) [9]

вернее, и с Execute тоже можно, просто чуть больше с ним "телодвижений" чем с open.


TADOCommand   (2008-04-23 16:59:00) [10]

не, финальный селект нам не нада.
прилада вообще не визуальная.


TADOCommand   (2008-04-23 16:59:00) [11]

точнее не интерактивная. сервис это 24х7


sniknik   (2008-04-23 16:58:00) [12]

> Скрипт из [6] без финального select можно одним блоком Execute выполнить.
с финальным тоже, только с open.


Ega23   (2008-04-23 16:53:00) [13]


> Anatoly Podgoretsky ©   (23.04.08 16:38) [8]
>
> > Ega23  (23.04.2008 13:57:01)  [1]
>
> Какая разница?


Ну разница в том, когда получать значение на клиент (и получать ли вообще). Скрипт из [6] без финального select можно одним блоком Execute выполнить.


Anatoly Podgoretsky   (2008-04-23 16:38:00) [14]

> TADOCommand  (23.04.2008 14:01:03)  [3]

Это не намек, а прямое указание.


Anatoly Podgoretsky   (2008-04-23 16:38:00) [15]

> Ega23  (23.04.2008 13:57:01)  [1]

Какая разница?


TADOCommand   (2008-04-23 14:44:00) [16]

ага, понятно. сенкс.


Ega23   (2008-04-23 14:24:00) [17]

Ну либо всё разом, оба инсерта. Что-то типа
declare @x int
Set NoCount ON
insert into MasterTable (....) Values (....)
Set @x = Scope_Identity()
insert into DetailTable (MasterID, ....) Values (@X, ...)
Select Result=@x;


Последний select - это если на клиент получить и спозиционироваться.


Ega23   (2008-04-23 14:21:00) [18]


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


Конечно.


TADOCommand   (2008-04-23 14:04:00) [19]

А нету там чо-нить наподобие ораклового returning, чтобы после первого инсерта ключ уже был на клиенте?


TADOCommand   (2008-04-23 14:01:00) [20]

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


Страницы:   1 2

Наверх

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