Algumas vezes queremos obter a chave gerada pelo banco após a inserção de uma tupla, no exemplo abaixo temos uma stored procedure que insere um cliente no banco e retorna o ID.

Resposta:

SQL:

CREATE PROCEDURE [dbo].[Cliente_Insert]
    @Nome VARCHAR(255),
    @Email VARCHAR(255),
    @Tel VARCHAR(255),
    @ClienteID INT OUTPUT
AS
BEGIN
    INSERT INTO dbo.Cliente ([Nome], Email, Tel)
    VALUES (@Nome,@Email,@Tel)

    SET @ClienteID = SELECT ClienteID
              FROM dbo.Cliente
              WHERE [Nome] = @Nome
              AND Email = @Email
              AND Tel = @Tel
END

Apesar de funcionar em alguns casos esse comando não é ideal, pois pode retornar mais de uma tupla não sendo a tupla correta. Para resolver esse problema podemos usar o SCOPE_IDENTITY().

SQL:

CREATE PROCEDURE [dbo].[Cliente_Insert]
    @Nome VARCHAR(255),
    @Email VARCHAR(255),
    @Tel VARCHAR(255),
    @ClienteID INT OUTPUT
AS
BEGIN
    INSERT INTO dbo.Cliente ([Nome], Email, Tel)
    VALUES (@Nome,@Email,@Tel)

    SET @ClienteID = CAST(SCOPE_IDENTITY() AS INT)
END

Utilizamos o CAST apenas para assegurar o tipo retornado.

http://msdn.microsoft.com/en-us/library/ms190315.aspx

http://msdn.microsoft.com/en-us/library/ms187342.aspx

Endereço de trackback para este post

Trackback URL (clique direito e copie atalho/localização do link)

Sem feedback para esse post ainda

Deixe seu comentário


Seu endereço de e-mail não será revelado nesse site.

Sua URL será exibida.
(Quebras de linha se tornam <br />)
(Nome, e-mail & website)
(Permitir que usuários o contatem através de um formulário eletrônico (seu e-mail não será exibido.))