-
Подскажите как элегантнее поступить в ситуации:
Требуется сделать по инсерту в две таблицы.
Первый инсерт должен породить уникальный целочисленный ключ, который потом должен быть использован во втором инсерте. (связь один к одному в общем);
PS MSSQL2005
-
В одной транзакции или нет?
-
в одной
-
намек на сначала вставить, потом взять идентити таблицы и сделать второй инсерт?
-
А нету там чо-нить наподобие ораклового returning, чтобы после первого инсерта ключ уже был на клиенте?
-
> намек на сначала вставить, потом взять идентити таблицы
> и сделать второй инсерт?
>
Конечно.
-
Ну либо всё разом, оба инсерта. Что-то типа
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 (23.04.2008 13:57:01) [1]
Какая разница?
-
> TADOCommand (23.04.2008 14:01:03) [3]
Это не намек, а прямое указание.
-
> Anatoly Podgoretsky © (23.04.08 16:38) [8]
>
> > Ega23 (23.04.2008 13:57:01) [1]
>
> Какая разница?
Ну разница в том, когда получать значение на клиент (и получать ли вообще). Скрипт из [6] без финального select можно одним блоком Execute выполнить.
-
> Скрипт из [6] без финального select можно одним блоком Execute выполнить.
с финальным тоже, только с open.
-
не, финальный селект нам не нада.
прилада вообще не визуальная.
-
точнее не интерактивная. сервис это 24х7
-
вернее, и с Execute тоже можно, просто чуть больше с ним "телодвижений" чем с open.
-
> sniknik © (23.04.08 16:58) [11]
>
> > Скрипт из [6] без финального select можно одним блоком
> Execute выполнить.
> с финальным тоже, только с open.
>
Не, ну у автора же ник TADOCommand... :)))
-
> вернее, и с Execute тоже можно, просто чуть больше с ним
> "телодвижений" чем с open.
Можно, только "нафига козе баян?" :)
-
> Можно, только "нафига козе баян?" :)
не знаю, это ты предлагал значение в рекордсете получать. я бы сделал через аутпут параметр.
-
> не знаю, это ты предлагал значение в рекордсете получать.
> я бы сделал через аутпут параметр.
Старая привычка.
-
А почему нельзя в одной команде сделать 2 инсерта, не доставая ИД на клиента ?
-
> А почему нельзя в одной команде сделать 2 инсерта, не доставая
> ИД на клиента ?
Кто сказал, что нельзя? Ты ветку-то прочитал?
-
на клиенте он нужен так как мне его надо тут же отдать во внешнюю систему.
-
> Ega23 © (23.04.08 17:14) [20]
>
> > А почему нельзя в одной команде сделать 2 инсерта, не
> доставая
> > ИД на клиента ?
>
>
> Кто сказал, что нельзя? Ты ветку-то прочитал?
Невнимательно.
> TADOCommand (23.04.08 17:15) [21]
> на клиенте он нужен так как мне его надо тут же отдать во
> внешнюю систему.
Тогда понятно. См. советы Ega23.