Хотите использовать идентификатор, возвращенный из вставки, при последующей вставке в транзакции

StackOverflow https://stackoverflow.com/questions/5411697

  •  29-10-2019
  •  | 
  •  

Вопрос

Я использую Massive Роба Конери для доступа к базе данных.Я хочу обернуть транзакцию парой вставок, но вторая вставка использует идентификатор, возвращенный первой вставкой.Для меня не очевидно, как это сделать в транзакции.Будем признательны за некоторую помощь.

общий
Это было полезно?

Решение

Можно просто сделать это в сохраненной процедуре?Вы можете использовать scope_identity или, еще лучше, предложение output, чтобы получить нужные вам значения.И все вставки во все таблицы находятся в одной транзакции, которую можно откатить, если какая-либо из них не удалась.

Другие советы

Сделайте запрос между этими двумя вставками, этот метод от Massive может быть полезен:

общий

Ваш sql будет="select scope_identity ()"

ОБНОВЛЕНИЕ 26.02.2013

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

Приведенный выше код будет работать только тогда, когда соединение, которое делает "select scope_identity ()", является пулом.(Это должно быть то же соединение, что и вставка).

Метод Massive table.Insert(..) возвращает динамический, содержащий поле ID, заполненное «SELECT @@ IDENTITY».Он получает последний вставленный идентификатор из глобальной области видимости, что является очевидной ошибкой (очевидной в сценариях многопоточности).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top