SQL Server usa una expresión CASE en una declaración de actualización

La expresión CASE se usa para comparar una expresión con un conjunto de expresiones en SQL. El resultado de la expresión CASE es un valor booleano, verdadero o falso. Podemos usar varias declaraciones DML como INSERT, SELECT, DELETE y UPDATE con una declaración CASE. En este tutorial de Recetas Técnicas, veremos cómo usar una expresión CASE con sentencias UPDATE.

Podemos empezar caminando por un ejemplo.

Comience creando una tabla y denominándola "empleado".

si existe (SELECT name from sys.tables donde name = 'employee') drop table employee GO CREATE TABLE empleado (empid INT, ename VARCHAR (20), sal INT);


Insertar algunos datos de muestra en la tabla de empleados.

insertar en valores de empleado (100, 'jon smith', 50000); insertar en los valores de los empleados (101, 'mike', 2000); Insertar en valores de empleado (102, 'ab luther', 70000); insertar en valores de empleado (103, 'vish dalvi', 60000);
seleccione * de empleado; empid ename sal ----------- -------------------- ----------- 100 jon smith 50000 101 mike 2000 102 ab luther 70000 103 vish dalvi 60000


Hemos insertado cuatro filas y todas las filas son NON NULL. Por lo tanto, todas las filas tienen un valor válido.

Ahora vamos a crear otra tabla con empid y sal columnas como se enumeran en empleado mesa.

si existe (SELECT name from sys.tables donde name = 'emp') drop table emp GO CREATE TABLE emp (empid INT, sal INT);


Ahora, inserte algunos datos de muestra.

insertar en los valores emp (100, 50000); insertar en los valores emp (101, NULL); insertar en los valores emp (102, NULL); insertar en los valores emp (103, NULL);
seleccione * desde emp; sal de empid ----------- ----------- 100 50000 101 NULL 102 NULL 103 NULL

Tenga en cuenta que hemos insertado el mismo empid desde el empleado mesa en el emp mesa, pero la sal La columna es NULA para tres empleados.

Ahora, queremos actualizar la tabla emp y establecer el sal valor de columna igual a la sal columna en el empleado mesa. En la siguiente consulta, necesitamos usar una expresión CASE con la declaración de actualización.

ACTUALIZAR emp SET sal = (CASO CUANDO e2.sal ES NULLO ENTONCES e1.sal ELSE e2.sal END) DESDE el empleado e1 UNIDAD INTERNA emp e2 ON e1.empid = e2.empid;


En la consulta anterior, estamos comprobando si la e2.sal columna en el emp tabla es nula. Si es NULL, entonces actualice el valor con el sal columna de la empleado mesa o bien mantenerlo como está en otra condición.

Ahora, después de actualizar, si consulta el emp tabla, se puede ver el valor para el sal columna en el emp mesa. Esto tiene valores NULL actualizados con empleado mesa sal columna sobre la base de emparejamiento empid a partir de ambas tablas utilizando la unión interna.

seleccione * desde emp; sal de empid ----------- ----------- 100 50000 101 2000 102 70000 103 60000