Проблема хранимой процедуры в MS Access, вызванная ReturnsRecords (accdb) - PullRequest
1 голос
/ 17 февраля 2011

У меня относительно простая хранимая процедура, которая запускает вставку, а затем пытается вернуть последний вставленный идентификатор.Это сделано, чтобы я мог идентифицировать с помощью SCOPE_IDENTITY ().Это прекрасно сработало для меня.Но затем я получил сообщения о том, что на некоторых машинах сохраненный процесс может привести к дублированию результатов.

После исследования я обнаружил, что причиной является использование свойства ReturnsRecords.Когда true, он будет выполнять запрос дважды!Для выбора;какая разница.Для этого случая, однако, это вызывает дубликаты в моей базе данных.

Установка falsesRecords равным false устраняет проблему, но затем она отрицает цель сохраненного процесса (я абсолютно должен получить правильный последний вставленный идентификатор длязапись)!

У меня такой вопрос: как мне вставить эту запись и получить идентификатор новой записи, обойдя эту проблему?

Дополнительная информация:

  • В настоящее время я использую DAO
  • Я попробовал метод ADO.Command, но он очень подвержен ошибкам и, похоже, не работает с выходными параметрами для меня.
  • Я использую хранимый процесс исключительно с целью сохранения объема.Я не настроен на использование сохраненного процесса.Мне просто нужен надежный способ получить идентификатор последней вставленной строки.
  • Это ACCDB
  • Это происходит в Access 2007
  • Моя база данных БД - MSSQL Server 2008

Любая помощь или понимание приветствуется.

1 Ответ

1 голос
/ 17 февраля 2011

Один из ваших параметров в процедуре может быть установлен для вывода.Все еще не возвращайте никаких строк, но установите значение этого параметра в Scope_Identity ()

create proc ReturnTheNewID 
  @NewValue int
  , @ReturnNewID int output
as

set nocount on

insert ....

set @ReturnNewID = Scope_identity()
...