Хотите использовать идентификатор, возвращенный из вставки, при последующей вставке в транзакции
Вопрос
Я использую Massive Роба Конери для доступа к базе данных.Я хочу обернуть транзакцию парой вставок, но вторая вставка использует идентификатор, возвращенный первой вставкой.Для меня не очевидно, как это сделать в транзакции.Будем признательны за некоторую помощь.
общийРешение
Можно просто сделать это в сохраненной процедуре?Вы можете использовать scope_identity или, еще лучше, предложение output, чтобы получить нужные вам значения.И все вставки во все таблицы находятся в одной транзакции, которую можно откатить, если какая-либо из них не удалась.
Другие советы
Сделайте запрос между этими двумя вставками, этот метод от Massive может быть полезен:
общийВаш sql будет="select scope_identity ()"
ОБНОВЛЕНИЕ 26.02.2013
Еще раз посмотрев на массивный код, нет надежного способа получить последний вставленный идентификатор.
Приведенный выше код будет работать только тогда, когда соединение, которое делает "select scope_identity ()", является пулом.(Это должно быть то же соединение, что и вставка).
Метод Massive table.Insert(..)
возвращает динамический, содержащий поле ID, заполненное «SELECT @@ IDENTITY».Он получает последний вставленный идентификатор из глобальной области видимости, что является очевидной ошибкой (очевидной в сценариях многопоточности).