Eine andere Option wäre als Rückgabewert für die gespeicherte Prozedur (ich schlage dies jedoch nicht vor, da dies normalerweise am besten für Fehlerwerte ist).
Ich habe es als beide eingefügt, wenn es eine einzelne Zeile in Fällen einfügt, in denen die gespeicherte Prozedur sowohl von anderen SQL-Prozeduren als auch von einem Front-End verwendet wurde, das nicht mit OUTPUT-Parametern arbeiten konnte (IBATIS in .NET, glaube ich):
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
Der Ausgabeparameter ist in T-SQL beim Aufrufen von anderen gespeicherten Prozeduren einfacher zu handhaben, IMO, aber einige Programmiersprachen haben eine schlechte oder keine Unterstützung für Ausgabeparameter und arbeiten besser mit Ergebnismengen.