Как использовать выражение OUTPUT оператора INSERT для получения значения идентификатора?

Если у меня есть инструкция insert, например:

INSERT INTO MyTable
(  
  Name,
  Address,
  PhoneNo
)
VALUES
(
  'Yatrix',
   '1234 Address Stuff',
   '1112223333'
)

Как установить @var INT значение новой строки (называемое Id) с помощью предложения OUTPUT? Я видел примеры ввода INSERTED.Name в табличные переменные, например, но я не могу получить его в переменной, отличной от таблицы.

Я пробовал OUPUT INSERTED.Id AS @var, SET @var = INSERTED.Id, но ни один из них не работал.

Спасибо заранее.

Ответ 1

Вы можете либо иметь вновь вставленный идентификатор, который выводится на консоль SSMS, например:

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

Вы можете использовать это также, например. С#, когда вам нужно вернуть идентификатор к вашему вызывающему приложению - просто выполните SQL-запрос с .ExecuteScalar() (вместо .ExecuteNonQuery()), чтобы прочитать результирующий ID назад.

Или, если вам нужно захватить вновь вставленный ID внутри T-SQL (например, для последующей дальнейшей обработки), вам нужно создать переменную таблицы:

DECLARE @OutputTbl TABLE (ID INT)

INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

Таким образом, вы можете поместить несколько значений в @OutputTbl и выполнить дальнейшую обработку. Вы также можете использовать "регулярную" временную таблицу (#temp) или даже "настоящую" постоянную таблицу в качестве "конечной цели" здесь.