Respuestas:
Necesita una variable de tabla y puede ser así de simple.
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);
Más de un año después ... si lo que necesita es obtener el ID generado automáticamente de una tabla, puede simplemente
SELECT @ReportOptionId = SCOPE_IDENTITY()
De lo contrario, parece que estás atascado con el uso de una tabla.
Mucho más tarde, pero aún vale la pena mencionar, es que también puede usar variables para generar valores en la cláusula SET de una ACTUALIZACIÓN o en los campos de un SELECCIONAR;
DECLARE @val1 int;
DECLARE @val2 int;
UPDATE [dbo].[PortalCounters_TEST]
SET @val1 = NextNum, @val2 = NextNum = NextNum + 1
WHERE [Condition] = 'unique value'
SELECT @val1, @val2
En el ejemplo anterior, @ val1 tiene el valor anterior y @ val2 tiene el valor posterior, aunque sospecho que cualquier cambio de un disparador no estaría en val2, por lo que tendría que ir con la tabla de salida en ese caso. Para todo menos el caso más simple, creo que la tabla de salida también será más legible en su código.
Un lugar en el que esto es muy útil es si desea convertir una columna en una lista separada por comas;
DECLARE @list varchar(max) = '';
DECLARE @comma varchar(2) = '';
SELECT @list = @list + @comma + County, @comma = ', ' FROM County
print @list
SET @val2 = NextNum = NextNum + 1
.