Получение идентификатора строки, которую я только что вставил - PullRequest
3 голосов
/ 23 июня 2010

У меня есть две таблицы, которые связаны с внешними ключами.Мне нужно сделать несколько вставок в одну таблицу, а затем использовать значения столбца идентификаторов, которые являются частью моей следующей группы операторов вставки.Все это должно быть сделано с помощью SQL.

Я читал о SCOPE_IDENTITY (), но все примеры, которые я вижу, используют ASP / PHP / независимо от того, чтобы выполнить подстановку в следующем пакете вставок,У меня нет этой опции.

Любые указатели приветствуются.

Ответы [ 5 ]

1 голос
/ 23 июня 2010

В SQl Server 2008 вы также можете использовать предложение OUTPUT.

DECLARE @output TABLE (myid INT)

INSERT mytable (field1, field2)
    OUTPUT inserted.myid INTO @output
VALUES ('test', 'test')

SELECT * FROM @output

Что делает это особенно ценным, так это то, что если вы используете его для вставки нескольких записей вместо одной, вы можете получить все идентификаторы. Вы также можете вернуть любые другие поля, которые вам могут понадобиться.*

что-то вроде:

DECLARE @output TABLE (myid INT, field1 datetime)

INSERT mytable (field1, field2)
    OUTPUT inserted.myid, inserted.field1 INTO @output
Select '20100101', field3 from mytable2

SELECT * FROM @output
1 голос
/ 23 июня 2010

Используйте

SCOPE_IDENTITY() - Function 

вместо

@@IDENTITY Variable - 

, иначе вы получите результат последнего вставленного идентификатора - если в таблице есть триггер, чем при вставке куда-то, вы получаетеневерный результат назад (значение, вставленное триггером, а не вашим утверждением).Scope_Identity возвращает идентичность вашего заявления, и это то, что вы обычно хотите.

0 голосов
/ 23 июня 2010

Можно использовать

SELECT SCOPE_IDENTITY() [Iden] 

После оператора вставки в том же блоке.Это должно работать.

0 голосов
/ 23 июня 2010
-- Variable to hold new Id
Declare @NewId int

--Insert some values in to create a new ID
Insert Into dbo.MyTable1 (Col1)
Values (@NewValue)

-- Grab the new Id and store it in the variable
Select @NewId = Scope_Identity()

--Insert the new Id in to another table
Insert Into dbo.AnotherTable (Col1)
Values (@NewId)
0 голосов
/ 23 июня 2010

Вы можете сделать то же самое с SQL или TSQL. Просто назначьте столбец идентификации, как только вы выполните вставку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...