Как использовать предложение 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
) или даже "настоящая" постоянная таблица в качестве вашей "выходной цели" здесь.