Otra opción sería como valor de retorno para el procedimiento almacenado (aunque no sugiero esto, ya que suele ser lo mejor para los valores de error).
Lo he incluido tanto cuando está insertando una sola fila en los casos en que el procedimiento almacenado estaba siendo consumido por otros procedimientos SQL y un front-end que no podía funcionar con parámetros de SALIDA (IBATIS en .NET, creo):
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
Es más fácil trabajar con el parámetro de salida en T-SQL cuando se llama desde otros procedimientos almacenados en mi opinión, pero algunos lenguajes de programación tienen poca o ninguna compatibilidad con los parámetros de salida y funcionan mejor con conjuntos de resultados.