none
Proc - Insert/Update RRS feed

  • Pergunta

  • Bom dia galera,

     

    Tenho a seguinte proc aqui:

     

    Code Block

    ALTER procedure [dbo].[Stpprv_AplTIPOOPERACAO_GRUPO_Gravar]

    @intCodTipoOperacaoGrupo int = null,

    @vchrDscTipoOperacaoGrupo varchar(50) = null,

    @dateDataRegistro datetime = null,

    @tinyAtivo tinyint = null,

    @intCodTipoOperacaoGrupoRet int output

    as

    set nocount on

    declare

    @intReturnValue int,

    @intRowsAffected int,

    @bitControlTransaction bit

    begin

    if (@@trancount = 0)

    begin

    set @bitControlTransaction = 1

    begin transaction

    end

    update TIPOOPERACAO_GRUPO

    set

    DscTipoOperacaoGrupo = @vchrDscTipoOperacaoGrupo,

    Ativo = @tinyAtivo

    where

    CodTipoOperacaoGrupo = @intCodTipoOperacaoGrupo

    select

    @intReturnValue = @@error,

    @intRowsAffected = @@rowcount

    set @intCodTipoOperacaoGrupoRet=@intCodTipoOperacaoGrupo

    if ((@intRowsAffected = 0) and (@intReturnValue = 0))

    begin

    select @dateDataRegistro = isnull(@dateDataRegistro, getdate())

    insert into TIPOOPERACAO_GRUPO (

    CodTipoOperacaoGrupo,

    DscTipoOperacaoGrupo,

    DataRegistro,

    Ativo)

    values (

    @intCodTipoOperacaoGrupo,

    @vchrDscTipoOperacaoGrupo,

    @dateDataRegistro,

    @tinyAtivo)

    set @intReturnValue = @@error

    Select @intCodTipoOperacaoGrupo = IDENT_CURRENT('TIPOOPERACAO_GRUPO')

    set @intCodTipoOperacaoGrupoRet = @intCodTipoOperacaoGrupo

    end

    select

    @intReturnValue RETORNO

    if (@bitControlTransaction = 1)

    begin

    if (@intReturnValue <> 0)

    begin

    rollback transaction

    end

    else

    begin

    commit transaction

    end

    end

    end

    set nocount off

    return

     

     

     

    Basicamente os update funcionam, mas não consigo fazer um Insert, eu passo os parâmetros  assim:

     

    Code Block

    Stpprv_AplTIPOOPERACAO_GRUPO_Gravar null,'TESTE','2007/11/19 10:15:39',1,null

     
    Ocorre o seguinte erro: "Canot insert the explicit value for identity column in table..."
     
    Basicamente eu entendi que não posso passar um valor para uma coluna identity, mas como eu poderia executar esta proc?
    segunda-feira, 19 de novembro de 2007 12:18

Respostas

  •  

    Olá Rick,

     

    Você deve basicamente omitir a coluna com identity no seu insert, exemplo, se eu tiver uma tabela de pessoas com duas colunas, codigoPessoa e nomePessoa, o codigoPessoa tem identity, na hora de fazer insert temos que fazer assim:

    INSERT INTO Pessoa (nomePessoa)

    VALUES (@nomePessoa)

     

     

    E claro, se quiser passar um valor especifico pode usar o SET IDENTITY_INSERT NomeDaTabela ON, assim ele vai permitir que se insira valores diretamente na coluna.

     

     

    Se tiver qualquer problema, retorne.

     

     

     

    Abraço

    segunda-feira, 19 de novembro de 2007 12:27

Todas as Respostas

  • Bom dia Rick

     

    Você pode incluir registros em uma coluna identity sim, mas para isso você precisa utilizar o comando SET IDENTITY_INSERT. No seu caso ficaria assim

     

     

    SET IDENTITY_INSERT dbo.TipoOperacao_Grupo ON

     

    insert into TIPOOPERACAO_GRUPO (

    CodTipoOperacaoGrupo,

    DscTipoOperacaoGrupo,

    DataRegistro,

    Ativo)

    values (

    @intCodTipoOperacaoGrupo,

    @vchrDscTipoOperacaoGrupo,

    @dateDataRegistro,

    @tinyAtivo)

     

    SET IDENTITY_INSERT dbo.TipoOperacao_Grupo OFF

     

     

     

    Espero ter ajudado

     

     

    segunda-feira, 19 de novembro de 2007 12:24
  •  

    Olá Rick,

     

    Você deve basicamente omitir a coluna com identity no seu insert, exemplo, se eu tiver uma tabela de pessoas com duas colunas, codigoPessoa e nomePessoa, o codigoPessoa tem identity, na hora de fazer insert temos que fazer assim:

    INSERT INTO Pessoa (nomePessoa)

    VALUES (@nomePessoa)

     

     

    E claro, se quiser passar um valor especifico pode usar o SET IDENTITY_INSERT NomeDaTabela ON, assim ele vai permitir que se insira valores diretamente na coluna.

     

     

    Se tiver qualquer problema, retorne.

     

     

     

    Abraço

    segunda-feira, 19 de novembro de 2007 12:27
  • Vlw pessoal deu certo aqui.

    segunda-feira, 19 de novembro de 2007 12:30
  •  

    Legal Rick,

     

    Qualquer coisa, estamos por aqui.

     

     

    Abraço

    segunda-feira, 19 de novembro de 2007 12:34