none
Cambiar valores nulos por 0 en campos de tabla. RRS feed

  • Pregunta

  • Hola:

    Precisaría cambiar varios valores nulos que tengo en unos campos de tabla.

    Lo estoy haciendo mediante Is Null en un update pero querría saber por favor si esa es la forma más correcta de hacerlo o bieb  se puede sustituir por alguna otra lógica.

     cmd.CommandText = "UPDATE BalSitExpl Set PorcTot1=0, PorcTot2=0, PorcTot3=0, PorcTot4=0, " &
                                "PorcDesv1 = 0, PorcDesv2=0, PorcDesv3=0, PorcDesv4=0 " &
                                "WHERE PorcTot1 Is NULL And " &
                                "PorcTot2 Is NULL And PorcTot3 Is NULL  And PorcTot4 Is NULL And PorcDesv1 Is NULL And " &
                                "PorcDesv2 Is NULL And PorcDesv3 Is NULL And PorcDesv4 Is NULL "

    Gracias a todos.

    Gemma

    martes, 8 de noviembre de 2016 12:29

Respuestas

  • Pues no esta bien, porque al utilizar AND en el where solo te los cambia en los registros donde todos son null,

    en su lugar puedes hacer

    UPDATE BalSitExpl Set PorcTot1=COALESCE(PorcTot1,0) ,PorcTot2= COALESCE(PorcTot2,0)  PorcTot3=COALESCE(PorcTot3,0)....

    y no necesitas where

    martes, 8 de noviembre de 2016 12:36
  • Hola que tal gemma_campillo, aqui te paso un ejemplo:

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

    use tempdb
    go
    --Creamos una tabla de ejemplo
    create table BalSitExpl(
    Producto varchar(30),
    PorcTot1 int,
    PorcTot2 int,
    PorcTot3 int,
    PorcTot4 int)

    --insertamos registros en NULL
    insert into BalSitExpl(Producto,PorcTot1,PorcTot2,PorcTot3,PorcTot4)
                    values('Test1',null,5,4,null),
          ('Test2',1,null,null,null),
      ('Test3',6,5,4,null),
      ('Test4',null,null,4,null)
    --Verificamos
    select * from BalSitExpl

    --Actualizamos los valores NULL con O
    update BalSitExpl set PorcTot1=coalesce(PorcTot1,0),
                          PorcTot2=coalesce(PorcTot2,0),
      PorcTot3=coalesce(PorcTot3,0),
      PorcTot4=coalesce(PorcTot4,0)

    --Verificamos
    select * from BalSitExpl

    Saludos,

    Jorge Muchaypiña G.


    Business Intelligence Analyst

    • Marcado como respuesta gemma_campillo martes, 8 de noviembre de 2016 16:32
    martes, 8 de noviembre de 2016 16:07

Todas las respuestas

  • Pues no esta bien, porque al utilizar AND en el where solo te los cambia en los registros donde todos son null,

    en su lugar puedes hacer

    UPDATE BalSitExpl Set PorcTot1=COALESCE(PorcTot1,0) ,PorcTot2= COALESCE(PorcTot2,0)  PorcTot3=COALESCE(PorcTot3,0)....

    y no necesitas where

    martes, 8 de noviembre de 2016 12:36
  • Hola que tal gemma_campillo, aqui te paso un ejemplo:

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

    use tempdb
    go
    --Creamos una tabla de ejemplo
    create table BalSitExpl(
    Producto varchar(30),
    PorcTot1 int,
    PorcTot2 int,
    PorcTot3 int,
    PorcTot4 int)

    --insertamos registros en NULL
    insert into BalSitExpl(Producto,PorcTot1,PorcTot2,PorcTot3,PorcTot4)
                    values('Test1',null,5,4,null),
          ('Test2',1,null,null,null),
      ('Test3',6,5,4,null),
      ('Test4',null,null,4,null)
    --Verificamos
    select * from BalSitExpl

    --Actualizamos los valores NULL con O
    update BalSitExpl set PorcTot1=coalesce(PorcTot1,0),
                          PorcTot2=coalesce(PorcTot2,0),
      PorcTot3=coalesce(PorcTot3,0),
      PorcTot4=coalesce(PorcTot4,0)

    --Verificamos
    select * from BalSitExpl

    Saludos,

    Jorge Muchaypiña G.


    Business Intelligence Analyst

    • Marcado como respuesta gemma_campillo martes, 8 de noviembre de 2016 16:32
    martes, 8 de noviembre de 2016 16:07
  • Muchas gracias a los dos.

    Funciona perfectamente.

    Un cordial saludo.

    Gemma

    martes, 8 de noviembre de 2016 16:33