Самый надежный способ получить последний идентификатор записи из таблицы

В SQL Server 2008 и выше, что является лучшим/безопасным/наиболее правильным способом

  • чтобы получить идентификатор (на основе первичного ключа автоинкремента) из таблицы базы данных?
  • для получения значения последней строки какого-либо другого столбца (например, SELECT TOP 1 FROM Table ORDER BY DESC)?

Ответ 1

Самым надежным способом будет вывод или возврат scope_identity() в процедуре, вставляющей строку, а затем извлечение строки на основе этого идентификатора. Использование @@Identity следует избегать, так как вы можете получить неправильный идентификатор, когда триггеры находятся в игре.

Любая техническая просьба о максимальном значении /top 1 страдает от состояния гонки, когда 2 человека, добавляя в то же время, будут получать одинаковый идентификатор, когда они будут искать самый высокий идентификатор.

Ответ 2

SELECT IDENT_CURRENT('Table')

Вы можете один из этого примера:

SELECT * FROM Table 
WHERE ID = (
    SELECT IDENT_CURRENT('Table'))

SELECT * FROM Table
WHERE ID = (
    SELECT MAX(ID) FROM Table)

SELECT TOP 1 * FROM Table
ORDER BY ID DESC

Но первый будет более эффективным, потому что сканирование индекса не требуется (если у вас есть индекс по столбцу Id).

Второе решение эквивалентно третьему (им обоим нужно отсканировать таблицу, чтобы получить максимальный идентификатор).

Ответ 3

1.  SELECT MAX(Id) FROM Table

Ответ 4

Ты можешь попробовать:

SELECT id FROM your_table WHERE id = (SELECT MAX(id) FROM your_table)

Где id является первичным ключом your_table

Ответ 5

Я думаю, что этот тоже будет работать:

SELECT * FROM ORDER BY id DESC LIMIT 0, 1

Ответ 7

И если вы имеете в виду выбор идентификатора последней вставленной записи, ее

SELECT @@IDENTITY FROM table