Se eu tiver uma instrução de inserção como:
INSERT INTO MyTable
(
Name,
Address,
PhoneNo
)
VALUES
(
'Yatrix',
'1234 Address Stuff',
'1112223333'
)
Como defino @var INT
o valor de identidade da nova linha (chamada Id
) usando a cláusula OUTPUT? Já vi exemplos de inserção de INSERTED.Name em variáveis de tabela, por exemplo, mas não consigo inseri-lo em uma variável que não seja de tabela.
Eu tentei OUPUT INSERTED.Id AS @var
, SET @var = INSERTED.Id
mas nenhum deles funcionou.
sql
sql-server-2005
insert
Yatrix
fonte
fonte
OUTPUT
cláusula.OUTPUT
cláusula grava em uma tabela. Pode ser uma variável de tabela, tabela temporária, ....Respostas:
Você pode ter o ID recém-inserido sendo enviado para o console do SSMS da seguinte maneira:
Você também pode usar isso em, por exemplo, C #, quando precisar recuperar o ID do seu aplicativo de chamada - basta executar a consulta SQL com
.ExecuteScalar()
(em vez de.ExecuteNonQuery()
) para ler o resultado resultanteID
.Ou, se você precisar capturar o recém-inserido
ID
dentro do T-SQL (por exemplo, para processamento posterior posterior), precisará criar uma variável de tabela:Dessa forma, você pode colocar vários valores
@OutputTbl
e fazer um processamento adicional sobre eles. Você também pode usar uma tabela temporária "regular" (#temp
) ou mesmo uma tabela persistente "real" como seu "destino de saída" aqui.fonte
real persistent table
- isso é extremamente fantástico, pois significa que você podeINSERT
obter informações nasTWO
tabelas ao mesmo tempo.SCOPE_IDENTITY()
funciona melhor para isso.