Как я могу получить поле Identity, полученное при вставке? - PullRequest
4 голосов
/ 11 ноября 2010

Я собираюсь вставить данные в таблицу примерно так:

Insert Into MyTable (Field1, Field2)
           Values   ('test', 5)

Когда эта вставка произойдет, новая строка будет иметь идентифицирующее значение в столбце ID. Если в моем коде T-SQL есть переменная @ID, как мне заполнить @ID результатом вставки T-SQL?

Declare @ID int

Insert into MyTable (Field1, Field2)
             Values ('test', 5)

--//How do I populate @ID with the value of ID of the record that was just inserted?

Ответы [ 3 ]

18 голосов
/ 11 ноября 2010

Есть два способа - первый - использовать SCOPE_IDENTITY :

DECLARE @ID INT

INSERT INTO MyTable (Field1, Field2)
VALUES ('test', 5)

SELECT @ID = SCOPE_IDENTITY() 

Не используйте @@ IDENTITY - значение, которое оно содержит, относится к последнему обновленному столбцу IDENTITY без учета области действия. Это означает, что не надежно, что оно содержит значение для вашего INSERT, а для SCOPE_IDENTITY -.

Другой альтернативой является использование предложения OUTPUT (SQL Server 2005 +).

2 голосов
/ 11 ноября 2010
SELECT @ID = SCOPE_IDENTITY();
0 голосов
/ 11 ноября 2010

Вы должны использовать scope_identity в вашем случае.

Существуют разные способы получения последней вставленной личности, и они отличаются тем, как они работают только для вашей информации, перечисляя их -

  1. @@ IDENTITY

  2. SCOPE_IDENTITY ()

  3. IDENT_CURRENT

  4. ОТКАЗ ОТ ВЫВОДА (узнал об этом из ответа @OMG Ponies)

Рассмотрите различия и сравнений между ними, прежде чем решить, какой использовать.

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