Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.09;
Скачать: CL | DM;

Вниз

Зарезервировать ключ перед вставкой   Найти похожие ветки 

 
TADOCommand   (2008-04-23 13:53) [0]

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

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

PS MSSQL2005


 
Ega23 ©   (2008-04-23 13:57) [1]

В одной транзакции или нет?


 
TADOCommand   (2008-04-23 13:58) [2]

в одной


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

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


 
TADOCommand   (2008-04-23 14:04) [4]

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


 
Ega23 ©   (2008-04-23 14:21) [5]


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


Конечно.


 
Ega23 ©   (2008-04-23 14:24) [6]

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


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


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

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


 
Anatoly Podgoretsky ©   (2008-04-23 16:38) [8]

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

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


 
Anatoly Podgoretsky ©   (2008-04-23 16:38) [9]

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

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


 
Ega23 ©   (2008-04-23 16:53) [10]


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


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


 
sniknik ©   (2008-04-23 16:58) [11]

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


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

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


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

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


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

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


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


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


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


 
Ega23 ©   (2008-04-23 17:01) [16]


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


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


 
sniknik ©   (2008-04-23 17:04) [17]

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


 
Ega23 ©   (2008-04-23 17:06) [18]


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


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


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

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


 
Ega23 ©   (2008-04-23 17:14) [20]


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


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


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

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


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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.11.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
2-1222681814
Alik
2008-09-29 13:50
2008.11.09
Работа с сетевой картой


15-1221191564
Big Joe
2008-09-12 07:52
2008.11.09
12 сентября - День программиста


6-1194787304
Olegz77
2007-11-11 16:21
2008.11.09
Indy: TIdPop3, TIdMessage


15-1221451319
Slider007
2008-09-15 08:01
2008.11.09
С днем рождения ! 15 сентября 2008 понедельник


15-1221220415
Правильный$Вася
2008-09-12 15:53
2008.11.09
пластиковая пулеметная лента во время 2 мировой