Как использовать предложение OUTPUT оператора 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 ответ

Решение

Вы можете получить только что вставленный ID, выводимый на консоль SSMS следующим образом:

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

Вы также можете использовать это, например, из C#, когда вам нужно вернуть идентификатор в вызывающее приложение - просто выполните 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) или даже "настоящая" постоянная таблица в качестве вашей "выходной цели" здесь.

Другие вопросы по тегам