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

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

  1. получать идентификатор (на основе автопостепенного увеличения первичного ключа) из таблицы базы данных?
  2. для получения значения последней строки некоторого другого столбца (как ВЫБЕРИТЕ TOP 1 ИЗ Таблицы ORDER BY DESC)?
20
задан mare 6 August 2010 в 08:37
поделиться

5 ответов

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

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

15
ответ дан 29 November 2019 в 23:00
поделиться
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).

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

16
ответ дан 29 November 2019 в 23:00
поделиться
1.  SELECT MAX(Id) FROM Table
12
ответ дан 29 November 2019 в 23:00
поделиться

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

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

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

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

2
ответ дан 29 November 2019 в 23:00
поделиться

А если вы имеете в виду выбрать ID последней вставленной записи, то

SELECT @@IDENTITY FROM table
2
ответ дан 29 November 2019 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: