Самый безопасный способ получить идентификатор последней записи из таблицы - PullRequest
20 голосов
/ 06 августа 2010

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

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

Ответы [ 7 ]

15 голосов
/ 06 августа 2010

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

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

14 голосов
/ 06 августа 2010
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).

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

11 голосов
/ 06 августа 2010
1.  SELECT MAX(Id) FROM Table
6 голосов
/ 29 января 2015

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

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

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

3 голосов
/ 20 января 2014

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

ВЫБРАТЬ * ИЗ ЗАКАЗА ПО ID DESC LIMIT 0, 1

2 голосов
/ 06 августа 2010

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

SELECT @@IDENTITY FROM table
2 голосов
/ 06 августа 2010

Еще один способ -

select * from <table> where  id=(select max(id) from <table>)

Также вы можете проверить по этой ссылке -

http://msdn.microsoft.com/en-us/library/ms175098.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...