none
Duvida simples ao inserir coluna numa tabela...

    General discussion

  • Pessoal, boa tarde, tudo bem?

    Estou com um dúvida bem simples, porém nao estou conseguindo ver o q está errado...
    Aqui na empresa, preciso adicionar dois campos a uma tabela já existente, um campo chamado nota_numero e outro campo chamado pedido_compra.

    Fiz entao da seguinte maneira:

    alter

    table tb_apontamento
    add pedido_compra varchar(6) null

    alter
    table tb_apontamento
    add nota_numero varchar(9) null

    Até aí tudo bem...
    Porém tenho uma proc que dá o insert nessa tabela... Quando eu rodo essa proc sem ter criado os campos, ela vai normalmente, porém quando eu crio os campos, ele me retorna a seguinte mensagem do SQL:

    Insert Error: Column name or number of supplied values does not match table definition.

    A minha dúvida é... como eu faço para solucionar esse problema, sem ter que mexer na proc, visto que ela é utilizada em outros lugares, em outros sistemas? Existe uma maneira de criar esses campos sem que eles sejam obrigatórios no insert?

    A proc é a seguinte:

    CREATE
    procedure [dbo].[usp_apontamento_incluir]
    (
    @ordem_cod
    varchar(11),
    @ordem_qtde_apontada
    float,
    @ordem_qtde_perdida
    float,
    @produto_cod
    varchar(15),
    @produto_qtde
    float,
    @produto_usado
    bit,
    @produto_local
    varchar(2),
    @cracha_cod
    varchar(6),
    @empresa_cod
    varchar(3),
    @filial_cod
    varchar(2),
    @apontamento_conferente
    varchar(15) = null
    )
    AS
    BEGIN
    SET NOCOUNT ON;
    insert into tb_apontamento(ordem_cod,
    ordem_qtde_apontada
    ,
    ordem_qtde_perdida
    ,
    produto_cod
    ,
    produto_qtde
    ,
    produto_usado
    ,
    produto_local
    ,
    cracha_cod
    ,
    empresa_cod
    ,
    filial_cod
    ,
    apontamento_conferente
    )
    values
    (@ordem_cod,
    @ordem_qtde_apontada
    ,
    @ordem_qtde_perdida
    ,
    @produto_cod
    ,
    @produto_qtde
    ,
    @produto_usado
    ,
    @produto_local
    ,
    @cracha_cod
    ,
    @empresa_cod
    ,
    @filial_cod
    ,
    @apontamento_conferente
    )
    SET NOCOUNT OFF;
    END




    Muito obrigado pela ajuda..

    Fernando.

    Monday, August 24, 2009 8:00 PM

All replies

  • Olá Fernando!

    Esta sua SP aparentemente está correta, o problema deve ser em alguma trigger ou processo que é chamado em sua aplicação na sequencia dessa SP.

    Você poderia verificar se existe alguma trigger na tabela "tb_apontamento".

    Um exemplo de trecho que poderia ter causado esso problema:

    insert into tb_apontamento
    Select campo1, campo2, campo3 .. campo11
    From outraTabela
    Where Condicao
    Note que ao alterar a estrutura da sua tabela, este trecho de código,
    que funcionaria anteriomente, deixaria de funcionar ao criar as novas colunas. Isso porque o número de colunas na tua tabela é maior que o número de colunas retornada pela query.

    Qualquer dúvida, posta ai.

    Abraço,

    Aaron bock

    Monday, August 24, 2009 8:15 PM
  • Olá Aaron, muito obrigado pela resposta...

    Realmente não havia percebido que há uma trigger nessa tabela, para gravar o log, que segue:

    ALTER

    trigger [tr_log_apontamento]

    on

    [dbo].[tb_apontamento]

    for

    insert

    as

    insert

    tb_log_apontamento select * from inserted



    Creio que devido a isso estava gerando o erro, visto que na tabela de log, nao inseri esses dois novos campos.


    Muito obrigado pela ajuda, solucionou o meu problema me atentando para esse detalhe da trigger.
    Fernando.

    Tuesday, August 25, 2009 8:42 PM
  • Fernando,

    A utilização de triggers é uma recurso muito prático e útil, mas deve ser muito bem dimensionado e monitorado para evitar este tipos de problemas.
    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    Friday, August 28, 2009 1:00 AM