Un'altra opzione sarebbe come valore di ritorno per la procedura memorizzata (non lo suggerisco però, poiché di solito è il migliore per i valori di errore).
L'ho incluso come entrambi quando inserisce una singola riga nei casi in cui la stored procedure veniva utilizzata da entrambe le altre procedure SQL e da un front-end che non poteva funzionare con i parametri OUTPUT (IBATIS in .NET credo):
CREATE PROCEDURE My_Insert
@col1 VARCHAR(20),
@new_identity INT OUTPUT
AS
BEGIN
SET NOCOUNT ON
INSERT INTO My_Table (col1)
VALUES (@col1)
SELECT @new_identity = SCOPE_IDENTITY()
SELECT @new_identity AS id
RETURN
END
È più facile lavorare con il parametro di output in T-SQL quando si chiama da altre stored procedure IMO, ma alcuni linguaggi di programmazione hanno un supporto scarso o nullo per i parametri di output e funzionano meglio con i set di risultati.