Форум: "Базы";
Текущий архив: 2008.11.09;
Скачать: [xml.tar.bz2];
ВнизЗарезервировать ключ перед вставкой Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c