Получение ID последней вставленной строки в SQL: без временных таблиц

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для получения ID последней добавленной записи в MS SQL Server используйте функцию SCOPE_IDENTITY(), в MySQLLAST_INSERT_ID(), а в PostgreSQL следует применить ключевое слово RETURNING.

MS SQL Server:

SQL
Скопировать код
INSERT INTO YourTable (...) VALUES (...); 
SELECT SCOPE_IDENTITY(); -- Возврат ID свежедобавленной записи

MySQL:

SQL
Скопировать код
INSERT INTO YourTable (...) VALUES (...); 
SELECT LAST_INSERT_ID(); -- Возврат ID недавно вставленной записи

PostgreSQL:

SQL
Скопировать код
INSERT INTO YourTable (...) VALUES (...) RETURNING ID; -- Вставка записи и возврат её ID
Кинга Идем в IT: пошаговый план для смены профессии

SCOPE_IDENTITY() – вундеркинд SQL Server

В MS SQL Server функция SCOPE_IDENTITY() возвращает ID, сгенерированный в текущем исполняемом контексте, исключая запутанность с ID, созданными триггерами или в других сессиях.

OUTPUT – вспомогательный оператор SQL Server

Оператор OUTPUT в SQL Server позволяет мгновенно получить ID добавленных строк, что особенно важно при массовом добавлении строк за одну операцию.

SQL
Скопировать код
INSERT INTO YourTable (...)
OUTPUT Inserted.ID
VALUES (...); -- Возврат ID всех добавленных записей

Обращение с множественными вставками

При добавлении множества строк функция SCOPE_IDENTITY() может показаться неэффективной, вне зависимости от этого оператор OUTPUT обеспечивает возврат всех необходимых ID.

Визуализация

Можно представить процесс добавления записи и получения ID последней строки как фотофиниш в гонке данных.

Навигация по сложным сценариям

Будьте осмотрительны при использовании SCOPE_IDENTITY() в распределённых транзакциях и обдумайте использование функции XACT_STATE() или других методов для обработки подобных случаев.

Основные правила получения ID

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

Применение теории на практике

Пример использования OUTPUT с таблицей-переменной и получения ID сразу после добавления одной строки с помощью SCOPE_IDENTITY():

SQL
Скопировать код
DECLARE @InsertedIDs TABLE (ID INT);

INSERT INTO YourTable (...)
OUTPUT Inserted.ID INTO @InsertedIDs
VALUES (...);

SELECT ID FROM @InsertedIDs; -- Возврат сохранённых ID
SQL
Скопировать код
DECLARE @LastID INT;

INSERT INTO YourTable (...)
VALUES (...);

SET @LastID = SCOPE_IDENTITY(); -- Сохранение ID последней добавленной записи

Пословица к размышлению

Даже надёжные инструменты вроде SCOPE_IDENTITY() могут вызвать неприятности после массового добавления строк. Поэтому регулярно проводите тесты приложений в сложных условиях.

Полезные материалы

  1. Официальная документация функции LAST_INSERT_ID() от MySQL.
  2. Примеры получения ID недавно добавленной записи на Stack Overflow.
  3. Оператор RETURNING в официальной документации PostgreSQL.
  4. Руководство по применению функции SCOPE_IDENTITY() в SQL Server.
  5. Как узнать ID последней добавленной строки в SQLite.
  6. Особенности вычисления ID последней добавленной строки в MariaDB.
  7. Советы от Oracle по получению идентификатора последней добавленной строки.