none
Update com problemas em dados "NULL" RRS feed

  • Pergunta

  • Boa tarde,

    Estou fazendo um UPDATE puxando dados de um select.
    SEGUE ABAIXO:

    " update itemfilest
    set estminimo = (select qt_ideal from __estmin itf where itf.codpro = itemfilest.codpro)
    "

    Porem, a operacao nao eh concluida e me aparece a seguinte mensagem:
    "Cannot insert the value NULL into column 'estminimo', table 'bdteste.dbo.ITEMFILEST'; column does not allow nulls. UPDATE fails.
    "

    Preciso urgente de ajuda... desde ja agradeco...

    Sds,

    Andre.

    • Movido Gustavo Maia Aguiar terça-feira, 25 de agosto de 2009 17:41 (De:SQL Server - Desenvolvimento Geral)
    segunda-feira, 24 de agosto de 2009 17:45

Respostas

  • André,

    Tenta usar assim o teu comando:

    update itemfilest
    set
    estminimo = itf.qt_ideal 
    from itemfilest fil
    inner join __estmin itf on (itf.codpro = fil.codpro and isnull(itf.estminimo, 0) > 0)
    where fil.filial = 08
    Abração,

    Aaron Bock
    • Marcado como Resposta André LuizZ segunda-feira, 24 de agosto de 2009 19:54
    segunda-feira, 24 de agosto de 2009 19:16

Todas as Respostas

  • Boa tarde, André

    O erro acima ocorre pois a coluna "estminimo" está sendo atualizada com com null, nos casos em que a coluna "qt_ideal" estiver nula, ou mesmo quando a tua subquery não retornar um registro.
    Esta tabela chamada "__estmin" tem um registro para cada linha de "itemfilest"?

    Caso tenha, você pode resolver o problema apenas usando a função isnull na tua subquery, como sugerido abaixo:

    update itemfilest
    set estminimo = (select IsNull(qt_ideal, 0) qt_ideal from __estmin itf where itf.codpro = itemfilest.codpro)
    

    Caso contrário você terá de alterar o teu select para não atualizar as linhas que não tem correspondencia na subquery.

    Abraço,

    Aaron bock



    segunda-feira, 24 de agosto de 2009 18:09
  • Sim, pretendo que esse apdate atualize apenas as linhas que correspondem na subquery!
    montei ele da seguinte forma:

    update itemfilest
    set
    estminimo = (select isnull(qt_ideal,0)
                     from __estmin itf
                     where itf.codpro = itemfilest.codpro)
    where itemfilest.filial = 08
    and itemfilest.codpro = (select codpro
                     from __estmin itf
                     where itf.codpro = itemfilest.codpro
                     and itf.estminimo > 0)


    mas o erro persiste...
    Ainda necessito de ajuda urgente.. como fazer para ele nao atualizar as linhas que não tem correspondencia na subquery???????

    Desde ja agradeco mais uma vez..

    Andre.
    segunda-feira, 24 de agosto de 2009 18:51
  • Andre,

    Você mudou o primeiro TSQL em relação ao ultimo que você postou aqui.

    Vou passar um exemplo do primeiro, e você inclui mais RESTRIÇÕES na clausula WHERE se for necessário:

    update itemfilest
    set itemfilest.estminimo =  isnull(itf.qt_ideal,0)
    from __estmin itf 
    where itf.codpro = itemfilest.codpro

    []s


    Esta postagem é provida "COMO ESTÁ" sem garantias, e não conferem direitos.


    Alex Rosa -- Sharing my knowledge at http://www.keep-learning.com/blog
    segunda-feira, 24 de agosto de 2009 19:02
  • André,

    Tenta usar assim o teu comando:

    update itemfilest
    set
    estminimo = itf.qt_ideal 
    from itemfilest fil
    inner join __estmin itf on (itf.codpro = fil.codpro and isnull(itf.estminimo, 0) > 0)
    where fil.filial = 08
    Abração,

    Aaron Bock
    • Marcado como Resposta André LuizZ segunda-feira, 24 de agosto de 2009 19:54
    segunda-feira, 24 de agosto de 2009 19:16
  • Vlw...
    Obrigado mesmo deu tudo certo!!


    \o/
    segunda-feira, 24 de agosto de 2009 19:54