Получить последний идентификатор вставки из Access - PullRequest
3 голосов
/ 09 ноября 2010

Я знаком с функцией MySQL LAST_INSERT_ID;Существует ли аналогичная функция для выполнения того же запроса с базой данных MS Access через ODBC?

В моем конкретном случае я использую PHP + PDO для вставки строк в базу данных Access и хотел бы знать последнийзначение первичного ключа каждой вставки по мере их выполнения.

Если эта функция недоступна, есть ли альтернативы?(без изменения базы данных)

Спасибо.

Ответы [ 4 ]

5 голосов
/ 09 ноября 2010

Похоже, что Access 2000 или более поздняя версия поддерживает свойство @@IDENTITY.Таким образом, вам нужно будет выбрать его значение только после ВСТАВКИ:

select @@IDENTITY from myTable

Пожалуйста, смотрите ссылку MSDN: Retrieving Identity or Autonumber Values

Короче говоря:

[...] Microsoft Access 2000 или более поздняя версия поддерживает свойство @@ IDENTITY для получения значения поля Autonumber после INSERT.Используя событие RowUpdated, вы можете определить, произошла ли INSERT, извлечь последнее значение @@ IDENTITY и поместить его в столбец идентификаторов локальной таблицы в наборе данных.

2 голосов
/ 10 ноября 2010

Как уже говорили другие, SELECT @@IDENTITY работает с Jet 4 и ACE.

Новое рассмотрение было введено в Access 2010, и это потому, что новая версия ACE поддерживает макросы данных на уровне таблиц, которые эквивалентны триггерам. Таким образом, вставка в одну таблицу может инициировать вставку в другую, так что @@ IDENTITY может быть значением для второй таблицы вместо таблицы верхнего уровня. Насколько я знаю, для этого сценария нет эквивалента SCOPE_IDENTITY () SQL Server.

Я спрашивал об этом на других форумах Access, и никто, кажется, не знает. Это то, на что нужно обратить внимание, если вы используете ACCDB с макросами данных на уровне таблицы.

1 голос
/ 09 ноября 2010

Попробуйте запустить «SELECT @@ IDENTITY FROM MyTable» после вставки.

1 голос
/ 09 ноября 2010

Я никогда не пытался использовать доступ с php, но на ум приходят две идеи. Первая проста. И это просто выбрать max (id) из таблицы после вставки, так как она автоматически увеличивается, вы получите самое высокое значение, которое должно быть вставленным значением. Во-вторых, вы можете попробовать использовать odbc_cursor (http://au2.php.net/manual/en/function.odbc-cursor.php).

...