none
Actualizar campo si es diferente al valor a introducir RRS feed

  • Pregunta

  • Hola,

    ¿Es posible actualizar un campo si es diferente al nuevo valor?

    Por ejemplo:

    Si quiero actualizar el nombre de un empleado:

    nombre del empleado: Juan

    Nuevo nombre: Juan

    En este caso al ser iguales no actualizaría el campo, pero teniendo este caso debería actualizarlo:

    nombre del empleado: Juan

    Nuevo nombre: José


    Antonio Mata

    jueves, 21 de mayo de 2020 17:48

Respuestas

  • Hola A. Mata:

    Tal cual lo expones, parece que solicitas esto:

    declare @nombre varchar(100)='XXX'
    UPDATE TABLA SET NOMBRE = @nombre
    WHERE NOMBRE <> @NOMBRE
    Aplicar una restricción where ... pero debieras de identificar el registro, para que no actualice toda la tabla.

    • Marcado como respuesta A. Mata jueves, 21 de mayo de 2020 18:36
    jueves, 21 de mayo de 2020 18:12

Todas las respuestas

  • Hola A. Mata:

    Tal cual lo expones, parece que solicitas esto:

    declare @nombre varchar(100)='XXX'
    UPDATE TABLA SET NOMBRE = @nombre
    WHERE NOMBRE <> @NOMBRE
    Aplicar una restricción where ... pero debieras de identificar el registro, para que no actualice toda la tabla.

    • Marcado como respuesta A. Mata jueves, 21 de mayo de 2020 18:36
    jueves, 21 de mayo de 2020 18:12
  • Hola,

    gracias por responder. Me funcionó perfectamente.

    Y sí, la tabla tiene un id único, al where le puse otra condición.

    Lo estaba intentando hacer con la sentencia CASE y nunca me funcionó, ¿por qué?. Era de esta forma:

    DECLARE @Nuevo AS VARCHAR(20) = 'XXX'
    
    UPDATE TABLA
    SET CAMPO = (CASE WHEN CAMPO <> @Nuevo THEN @Nuevo ELSE CAMPO END)			
    WHERE id_tabla_pk = 1;	
    


    Antonio Mata

    jueves, 21 de mayo de 2020 18:36
  • Hola

     

     

    Gracias por levantar tu consulta en los foros de MSDN. Cerraremos el Hilo, por ende si tiene alguna otra consulta por favor genera otra consulta para que la comunidad de foros te pueda asesorar.

     

    Siempre es un placer atender tus consultas!

     

    Gracias por usar los foros de MSDN.

     

    Oscar Navarro

    jueves, 21 de mayo de 2020 20:43
    Moderador
  • Hola A. Mata:

    Eso si funciona.

    Create table tabla (id_tabla_pk  int, campo varchar(20))
    go
    insert into tabla (id_tabla_pk ,campo)
    values
    (1,'juan');
    go
    DECLARE @Nuevo AS VARCHAR(20) = 'XXX'
    
    UPDATE TABLA
    SET CAMPO = (CASE WHEN CAMPO <> @Nuevo THEN @Nuevo ELSE CAMPO END)			
    WHERE id_tabla_pk = 1;	
    
    select * from tabla

    viernes, 22 de mayo de 2020 3:27
  • Hola Javi.

    Tenía un incoveniente cuando trataba de guardar un valor NULL.

    Pasaba lo mismo cuando el campo era NULL y el nuevo valor a introducir era una Cadena, entonces no actualizaba.


    Antonio Mata

    viernes, 22 de mayo de 2020 17:44
  • Hola A. Mata: 
    Ojo con los null.

    Un campo null no se le puede aplicar operadores como tal. Fíjate en el ejemplo.

    Declare @a int; -- null porque no lo defino
    Declare @b int = 0;
    
    select case when @a <> @b then 'ES DIFERENTE'
    ELSE 'NO LO ES'
    END
    

    Un campo null hay que evaluarlo con @a is null o @a is not null pero no puedes aplicar. diferente o igual...etc.

    viernes, 22 de mayo de 2020 19:05