Como eu uso uma cláusula OUTPUT da instrução INSERT para obter o valor de identidade?

Se eu tiver uma instrução de inserção como:

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

Como faço para definir @var INT para o valor de identidade da nova linha (chamado Id ) usando a cláusula OUTPUT? Eu vi amostras de colocar INSERTED.Name em variables ​​de tabela, por exemplo, mas não consigo colocá-lo em uma variável que não seja de tabela.

Eu tentei OUPUT INSERTED.Id AS @var , SET @var = INSERTED.Id , mas nenhum funcionou.

Você pode ter o ID recém-inserido sendo enviado para o console do SSMS da seguinte forma:

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

Você pode usar isso também, por exemplo, C #, quando precisar retornar o ID ao seu aplicativo de chamada – basta executar a consulta SQL com .ExecuteScalar() (em vez de .ExecuteNonQuery() ) para ler o ID resultante novamente.

Ou se você precisar capturar o ID recém-inserido dentro do T-SQL (por exemplo, para processamento posterior posterior), você precisa criar uma variável de tabela:

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

Dessa forma, você pode colocar vários valores em @OutputTbl e fazer mais processamento @OutputTbl . Você também pode usar uma tabela temporária “regular” ( #temp ) ou até mesmo uma tabela persistente “real” como sua “meta de saída” aqui.