Outra opção seria como o valor de retorno para o procedimento armazenado (não sugiro isso, pois geralmente é melhor para valores de erro).
Eu o incluí tanto quando está inserindo uma única linha nos casos em que o procedimento armazenado estava sendo consumido por outros procedimentos SQL e um front-end que não podia funcionar com parâmetros OUTPUT (IBATIS no .NET, acredito):
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
É mais fácil trabalhar com o parâmetro de saída no T-SQL ao chamar de outros procedimentos armazenados IMO, mas algumas linguagens de programação têm pouco ou nenhum suporte para parâmetros de saída e funcionam melhor com conjuntos de resultados.