Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Procedimento armazenado - retorna a identidade como parâmetro de saída ou escalar


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.