Categorias

Obtendo o valor do IDENTITY em uma procedure no SQL Server

Descubra as vantagens de utilizar uma coluna identity ou autonumerada do SQL Server. Para quem trabalha com o PostgreSQL ou o Oracle, é o mesmo conceito da Sequence, embora a sequence seja um objeto a parte que é vinculado à tabela.

Você montou uma stored procedure que efetua o insert na tabela e gostaria de obter o número do Identity. Como fazer isso?

Vejamos no código o exemplo:

A tabela LOJ_MUNICIPIO possui 3 colunas:

MUN_IN_CODIGO – Integer – Identity: É o código do munícipio
MUN_ST_NOME – NVARCHAR(50) – É a descrição do municipio.
EST_CH_SIGLA – NCHAR(2) – É a sigla do Estado. É uma FK.

/* 
Projeto: 
Exemplo de Procedure que retorna o valor do IDENTITY 
A função SCOPE_IDENTITY retorna o último valor identity 
no escopo da execução atual. 
Caso você utilize @@IDENTITY, sugiro substituí-la, já que 
nas tabelas que possuem triggers ela pode não retornar o 
valor correto. 
Autor: Prof. Ricardo Leme 
Data: 26/06/2009 
*/


CREATE PROCEDURE dbo.SP_I_LOJ_MUNICIPIO 
@pNome nvarchar(50), 
@pSigla nchar(2), 
@pCodigo int =0 OUT 
AS 
SET NOCOUNT ON 
INSERT INTO LOJ_MUNICIPIO (MUN_ST_NOME, EST_CH_SIGLA) VALUES(@pNome, @pSigla) 
SET @pCodigo = SCOPE_IDENTITY() 
--A linha do print pode ser removida. 
--Apenas está aqui para você visualizar o valor 
PRINT @pCodigo 
RETURN