Как получить значение автоинкремента последней строки во вставке
У меня есть проблема с этой проблемой в течение одной недели, и ничего полезного я думаю, что не использую правильное слово
Я использую SQL Server 2008 с t-sql, и мне нужно оптимизировать мою функцию, когда я вставляю новую строку.
У меня есть таблица с первым столбцом - это ключ целочисленного типа автоинкремента, а другие столбцы предназначены только для информации
Когда мы делаем вставку, SQL Server автоматически увеличивает ключ, и мне нужно сделать max, чтобы получить значение, так что есть способ как глобальная переменная типа @@IDENTITY
или функция, чтобы избежать транзакции начала конца и выберите max
Ответы
Ответ 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