Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

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


Você pode fazer com que o ID recém-inserido seja enviado para o console do SSMS assim:
INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')

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

Ou se você precisar capturar o ID recém-inserido dentro do T-SQL (por exemplo, para processamento 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 processamento adicional sobre eles. Você também pode usar uma tabela temporária "regular" (#temp ) ou até mesmo uma tabela persistente "real" como seu "destino de saída" aqui.