none
Erro em SP RRS feed

  • Pergunta

  • olá Pessoal!
    A SP abaixo me retorna o seguinte erro:
    "Erro: Insert Error: Column name or number of supplied values does not match table definition."

    alguém saberia me explicar o motivo??

    agradeço antecipadamente!

    -------------------------------------------------------------------------------------------------

    create table results (datalan smalldatetime, valorlan money)
    insert into results (datalan, valorlan) values ('2006-05-03', 4)
    insert into results (datalan, valorlan) values ('2006-05-10', 20)
    insert into results (datalan, valorlan) values ('2006-06-03', 25)
    insert into results (datalan, valorlan) values ('2006-07-03', 10)
    insert into results (datalan, valorlan) values ('2006-07-03', 18)
    insert into results (datalan, valorlan) values ('2006-07-03', 50)
    insert into results (datalan, valorlan) values ('2006-08-03', 12)
    insert into results (datalan, valorlan) values ('2006-08-30', 40)

    -------------------------------------------------------------------------------------------------

    -- baseado no exemplo de M.Colla
    CREATE PROC dbo.MinhaSP
     @dataini smalldatetime,
     @datafin smalldatetime
    AS

     SET NOCOUNT ON

     declare -- variaveis que controlam o loop
      @datainiAux smalldatetime,
      @datafinAux smalldatetime

     declare
      @stringDDL varchar(1000),
      @valorTot money

     set @datainiAux = dateadd(month, -4, @dataini)
     set @datafinAux = @datafin

     -- -4 pq sempre preciso pegar esses meses anteriores 
     set @dataini = dateadd(month, -4, @dataini)
     set @datafin = dateadd(month, -4, @datafin)

     -- crio a tabela temporaria
     create table #temp (cod int)
     -- insiro um registro para criar uma linha
     insert into #temp values (1)
     
     while @datainiaux < @datafinaux begin
     
      select @valortot = isnull(sum(valorlan),0) from results
      where datalan >= @dataini and datalan < @datafin
     
      set @stringDDL = 'alter table #temp add [' + right(convert(char(10), @datainiaux, 105), 7) + '] char(7)'
      exec(@stringDDL)

        set @stringDDL = 'update #temp set [' + right(convert(char(10), @datainiaux, 105), 7) + '] = ' + convert(varchar,@valortot)
      exec(@stringDDL)
     
        set @datainiAux = dateadd(month, 1, @datainiAux)
      set @dataini    = dateadd(month, 1, @dataini)
      set @datafin    = dateadd(month, 1, @datafin)
     end
     
     select * from #temp

    GO


    -------------------------------------------------------------------------------------------------


    exec dbo.MinhaSP '2006-08-01', '2006-09-01'


    -------------------------------------------------------------------------------------------------


     

    segunda-feira, 5 de março de 2007 15:18

Todas as Respostas

  • Boa tarde Douglas

     

    Experimenta colocar o tamanho do campo na variável varchar.

    Código atual

     set @stringDDL = 'update #temp set [' + right(convert(char(10), @datainiaux, 105), 7) + '] = ' + convert(varchar,@valortot)

     

    Alterar para

     set @stringDDL = 'update #temp set [' + right(convert(char(10), @datainiaux, 105), 7) + '] = ' + convert(varchar(100),@valortot)

     

     

    Espero ter ajudado

    segunda-feira, 5 de março de 2007 15:58
  • Douglas,

    Analisando a sua procedure, verifique que você esta realizando um conversão de um campo para VarChar, mas nesta conversão é necessário informar um valor para o campo, pois no SQL Server, quando se utiliza campos ou variáveis do tipo: Char, VarChar, NChar, NVarChar é obrigatório determinar um tamanho máximo para armazenar os caracteres especificos para estes campos ou variáveis.

    Para mim a solução que o Anderson destacou torna-se necessária para solucinar este erro.

    segunda-feira, 5 de março de 2007 16:29
  • Anderson e Junior..

     

    alterei e nada..

    esse erro não é referente quando vc tenta inserir valores em campos a mais do que a tabela contem?

    por exemplo:

    insert into tabela(a, b, c)

    values (1, 2, 2, 2)

    ??

     

     

     

    segunda-feira, 5 de março de 2007 17:20
  • Sim, mas o 1º erro localizado foi este, vou analisar novamente sua SP.
    segunda-feira, 5 de março de 2007 17:25
  • Douglas,

    A mensagem de erro se refere a isso, mas quando o SQL Server identifica um erro ele retorna o número da linha.

    Neste caso você tem o número da linha que esta dando erro.

    segunda-feira, 5 de março de 2007 17:33
  • Douglas,

    Este trecho do seu script esta dando erro também:

    create table results (datalan smalldatetime, valorlan money)
    insert into results (datalan, valorlan) values ('2006-05-03', 4)
    insert into results (datalan, valorlan) values ('2006-05-10', 20)
    insert into results (datalan, valorlan) values ('2006-06-03', 25)
    insert into results (datalan, valorlan) values ('2006-07-03', 10)
    insert into results (datalan, valorlan) values ('2006-07-03', 18)
    insert into results (datalan, valorlan) values ('2006-07-03', 50)
    insert into results (datalan, valorlan) values ('2006-08-03', 12)
    insert into results (datalan, valorlan) values ('2006-08-30', 40) <-- neste linha

    segunda-feira, 5 de março de 2007 17:37
  • Junior, acho que qdo vc foi copiar, vc acrescentou o "<" no ultimo insert.. hhehhe

     

    segunda-feira, 5 de março de 2007 18:37