Usuário com melhor resposta
Retornar ID por SP após insert

Pergunta
-
Pessoal,
Como vocês fazem na situação abaixo:
Tenho uma procedure que faz um insert na base, e se não deu nenhum erro me retorna o ID para a aplicação, da seguinte forma:
Code SnippetSET
@ID = IDENT_CURRENT('NOME_DA_TABELA')Vocês fazem assim? Isso garante que terei o ID correto?
Se não, qual seria a maneira mais correta para obter o ID referente aquele registro?
Obrigado,
Fernando
Respostas
-
Fernando, eu utilizo parâmetros de saída, note a variavel @Sequencial, ela recebe o SCOPE_IDENTITY()
Olhe o exemplo:
Code SnippetCREATE PROCEDURE
[dbo].[usp_MinhaSP] -- Parametros da SP@Sequencial int OUTPUT,
@MesReferencia
datetimeAS
BEGIN
SET NOCOUNT ON; BEGIN -- INSERT insert into Painel_Cabecalho (Mes_Referencia) values (@MesReferencia) SET @Sequencial = SCOPE_IDENTITY() ENDEND
Todas as Respostas
-
Fernando, eu utilizo parâmetros de saída, note a variavel @Sequencial, ela recebe o SCOPE_IDENTITY()
Olhe o exemplo:
Code SnippetCREATE PROCEDURE
[dbo].[usp_MinhaSP] -- Parametros da SP@Sequencial int OUTPUT,
@MesReferencia
datetimeAS
BEGIN
SET NOCOUNT ON; BEGIN -- INSERT insert into Painel_Cabecalho (Mes_Referencia) values (@MesReferencia) SET @Sequencial = SCOPE_IDENTITY() ENDEND
-
Boa Tarde,
A forma que o Roberto faz é provavelmente a mais correta (outra possibilidade seria o @@identity). O IDENT_CURRENT não é muito seguro, pois, se alguém inserir um registro após o seu INSERT e antes do IDENT_CURRENT você irá capturar o último ID (mesmo que não seja o do respectivo INSERT).
[ ]s,
Gustavo
http://gustavomaiaaguiar.spaces.live.com
-
-
-
Com certeza para o caso o SCOPE_IDENTITY() é a melhor opção. Ele retorna o último ID gerado num escopo de sessão. Sendo assim, mesmo que a tabela citada acima tenha alguma trigger que insira em outra tabela e essa outra tabela tb tenha um IDENTITY, ele retornará o identity da tabela citada( nesse caso o correto ), pois seu escopo é por sessão.
Abraços