Получить последний вставленный идентификатор строки (с помощью SQL) [дубликат]
этот вопрос уже есть ответ здесь:
Я хочу получить новый созданный идентификатор при вставке новой записи в таблицу.
Я прочитал это:http://msdn.microsoft.com/en-us/library/ms177564.aspx но он должен создать временный стол.
Я хочу вернуть идентификатор после выполнения инструкции INSERT (предполагая выполнение только одной вставки).
пример:
1 Joe Joe
2 Michael Mike
3 Zoe Zoe
при выполнении инструкции INSERT я хочу вернуть созданный идентификатор, означает 4.
может сказать мне, как это сделать с помощью инструкции SQL или это не возможно ?
3 ответов:
если ваша таблица SQL Server имеет столбец типа
INT IDENTITY(илиBIGINT IDENTITY), то вы можете получить последнее вставленное значение с помощью:INSERT INTO dbo.YourTable(columns....) VALUES(..........) SELECT SCOPE_IDENTITY()это работает до тех пор, пока вы не вставили еще одну строку - он просто возвращает последний
IDENTITYзначение раздается в этой области здесь.есть как минимум два варианта -
@@IDENTITYиIDENT_CURRENT- узнайте больше о том, как они работают и каким образом они отличаются (и могут дать вам неожиданные результаты) в этом отличные сообщение в блоге от Pinal Dave здесь.
предполагая простую таблицу:
CREATE TABLE dbo.foo(ID INT IDENTITY(1,1), name SYSNAME);мы можем захватить
IDENTITYзначения в табличной переменной для дальнейшего потребления.DECLARE @IDs TABLE(ID INT); -- minor change to INSERT statement; add an OUTPUT clause: INSERT dbo.foo(name) OUTPUT inserted.ID INTO @IDs(ID) SELECT N'Fred' UNION ALL SELECT N'Bob'; SELECT ID FROM @IDs;хорошая вещь об этом методе (а) он обрабатывает многорядные вставки (
SCOPE_IDENTITY()возвращает только последнее значение) и (b) он избегает это ошибка параллелизма, который может привести к неправильным результатам, но пока это только исправленных в SQL сервере 2008 R2 с пакетом обновления 1 с накопительным пакетом обновления 5.
вы можете использовать:
SELECT IDENT_CURRENT(‘tablename’)получить доступ к последней идентификатор таблицы определенным.
например, учитывая следующий код:
INSERT INTO dbo.MyTable(columns....) VALUES(..........) INSERT INTO dbo.YourTable(columns....) VALUES(..........) SELECT IDENT_CURRENT(‘MyTable’) SELECT IDENT_CURRENT(‘YourTable’)это приведет к правильному значению для соответствующих таблиц.
он возвращает последнее
IDENTITYзначение, созданное в таблице, независимо от соединения, создавшего значение, и независимо от области действия оператора, создавшего значение.
IDENT_CURRENTне ограничено объемом и сеанс; он ограничен указанной таблицей.IDENT_CURRENTвозвращает значение идентификатора, созданное для указанной таблицы в любом сеансе и области.
Comments