Respostas:
Você precisa de uma variável de tabela e pode ser assim tão simples.
declare @ID table (ID int)
insert into MyTable2(ID)
output inserted.ID into @ID
values (1)
output
?
DECLARE @InsertedIDResults TABLE (ID int); INSERT INTO MyTable (Name, Age) OUTPUT INSERTED.ID INTO @InsertedIDResults VALUES('My Name', 30); DECLARE @InsertedID int = (SELECT TOP 1 ID FROM @InsertedIDResults);
Mais de um ano depois ... se o que você precisa é obter o ID gerado automaticamente de uma tabela, basta
SELECT @ReportOptionId = SCOPE_IDENTITY()
Caso contrário, parece que você está preso ao usar uma tabela.
Muito mais tarde, mas ainda vale a pena mencionar, você também pode usar variáveis para gerar valores na cláusula SET de um UPDATE ou nos campos de um SELECT;
DECLARE @val1 int;
DECLARE @val2 int;
UPDATE [dbo].[PortalCounters_TEST]
SET @val1 = NextNum, @val2 = NextNum = NextNum + 1
WHERE [Condition] = 'unique value'
SELECT @val1, @val2
No exemplo acima, @ val1 tem o valor antes e @ val2 tem o valor depois, embora eu suspeite que alguma alteração de um gatilho não esteja no val2, portanto, você teria que ir com a tabela de saída nesse caso. Para qualquer coisa, menos o caso mais simples, acho que a tabela de saída também será mais legível no seu código.
Um lugar em que isso é muito útil é se você deseja transformar uma coluna em uma lista separada por vírgula;
DECLARE @list varchar(max) = '';
DECLARE @comma varchar(2) = '';
SELECT @list = @list + @comma + County, @comma = ', ' FROM County
print @list
SET @val2 = NextNum = NextNum + 1
.