Risposte:
Hai bisogno di una variabile di tabella e può essere così semplice.
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);
Più di un anno dopo ... se ciò di cui hai bisogno è ottenere l'id generato automaticamente di una tabella, puoi semplicemente
SELECT @ReportOptionId = SCOPE_IDENTITY()
Altrimenti, sembra che tu sia bloccato con l'uso di una tabella.
Molto più avanti, ma vale la pena ricordare che è anche possibile utilizzare le variabili per generare valori nella clausola SET di un UPDATE o nei campi di un 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
Nell'esempio sopra @ val1 ha il valore precedente e @ val2 ha il valore dopo anche se sospetto che eventuali modifiche da un trigger non siano in val2, quindi in questo caso dovresti andare con la tabella di output. Per tutto tranne che nel caso più semplice, penso che la tabella di output sia più leggibile anche nel tuo codice.
Un posto molto utile è se si desidera trasformare una colonna in un elenco separato da virgole;
DECLARE @list varchar(max) = '';
DECLARE @comma varchar(2) = '';
SELECT @list = @list + @comma + County, @comma = ', ' FROM County
print @list
SET @val2 = NextNum = NextNum + 1
.