Получить последний вставленный идентификатор строки (с помощью SQL) [дубликат]



этот вопрос уже есть ответ здесь:



Я хочу получить новый созданный идентификатор при вставке новой записи в таблицу.



Я прочитал это:http://msdn.microsoft.com/en-us/library/ms177564.aspx но он должен создать временный стол.



Я хочу вернуть идентификатор после выполнения инструкции INSERT (предполагая выполнение только одной вставки).



пример:



1     Joe      Joe
2 Michael Mike
3 Zoe Zoe


при выполнении инструкции INSERT я хочу вернуть созданный идентификатор, означает 4.



может сказать мне, как это сделать с помощью инструкции SQL или это не возможно ?

544   3  

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

    Ничего не найдено.