Как получить значение автоинкремента последней строки во вставке - программирование
Подтвердить что ты не робот

Как получить значение автоинкремента последней строки во вставке

У меня есть проблема с этой проблемой в течение одной недели, и ничего полезного я думаю, что не использую правильное слово

Я использую SQL Server 2008 с t-sql, и мне нужно оптимизировать мою функцию, когда я вставляю новую строку.

У меня есть таблица с первым столбцом - это ключ целочисленного типа автоинкремента, а другие столбцы предназначены только для информации

Когда мы делаем вставку, SQL Server автоматически увеличивает ключ, и мне нужно сделать max, чтобы получить значение, так что есть способ как глобальная переменная типа @@IDENTITY или функция, чтобы избежать транзакции начала конца и выберите max

4b9b3361

Ответ 1

Используйте SCOPE_IDENTITY:

-- do insert

SELECT SCOPE_IDENTITY();

Что вам даст:

Последнее значение идентичности, вставленное в столбец идентификатора в тот же объем. Объем - это модуль: хранимая процедура, триггер, функции или партии. Поэтому два оператора находятся в одной и той же области, если они находятся в одной и той же хранимой процедуре, функции или партии.

Ответ 2

Просто запустил код:

INSERT INTO Persons (FirstName) VALUES ('Joe');
SELECT ID AS LastID FROM Persons WHERE ID = @@Identity;

и он также работает!

Ответ 3

что об этом для последнего значения автоматического увеличения

SELECT IDENT_CURRENT ('table_name') - IDENT_INCR ('table_name')

Ответ 4

Если вы используете MySQL, вы получаете идентификатор автоматического инкремента последней вставки с помощью:

SELECT LAST_INSERT_ID();

См. здесь для полной справки.

Ответ 5

В моем случае мне пришлось использовать @@Identity, потому что я вставлял в представление. Кажется, что SCOPE_IDENTITY работает только для тех, которые вы явно создали.

Смотрите здесь:

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

@@IDENTITY вернет последнее значение идентификатора, введенное в таблицу в ваш текущий сеанс. Хотя @@IDENTITY ограничен текущим сеанс, он не ограничивается текущей областью. Если у вас есть триггер на таблице, которая вызывает создание идентичности в другой таблице, вы получит личность, которая была создана последней, даже если она была триггер, который его создал.

Ответ 6

SELECT IDENT_CURRENT(‘tablename’)

Он возвращает последнее значение IDENTITY, созданное в таблице, независимо от соединения, которое создало значение, и независимо от области действия оператора, который произвел значение. IDENT_CURRENT не ограничивается областью и сеансом; он ограничен указанной таблицей. IDENT_CURRENT возвращает значение идентификатора, сгенерированное для конкретной таблицы, в любом сеансе и в любой области.

Взято из: http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

Или это:

INSERT INTO Persons (FirstName) VALUES ('Joe');
SELECT ID AS LastID FROM Persons WHERE ID = @@Identity; 

Взято из: http://network.convergenceservices.in/forum/22-ms-sql/384-get-last-inserted-record-id-in-ms-sql.html