SQL Server Utilizzare un'espressione CASE in una dichiarazione di aggiornamento

L'espressione CASE viene utilizzata per confrontare un'espressione con un insieme di espressioni in SQL. Il risultato dell'espressione CASE è un valore booleano, vero o falso. Possiamo utilizzare varie istruzioni DML come INSERT, SELECT, DELETE e UPDATE con un'istruzione CASE. In questo tutorial su Tech-Recipes, vedremo come utilizzare un'espressione CASE con istruzioni UPDATE.

Possiamo iniziare camminando attraverso un esempio.

Inizia creando una tabella e nominandola "dipendente".

se esiste (SELECT name da sys.tables where name = 'employee') drop table employee GO CREATE TABLE impiegato (empid INT, ename VARCHAR (20), sal INT);


Inserire alcuni dati di esempio nella tabella dei dipendenti.

inserire in valori dipendenti (100, 'jon smith', 50000); inserire in valori dipendenti (101, 'mike', 2000); inserire in valori dipendenti (102, 'ab luther', 70000); inserire in valori dipendenti (103, 'vish dalvi', 60000);
seleziona * dal dipendente; empam ename sal ----------- -------------------- ----------- 100 jon smith 50000 101 mike 2000 102 ab luther 70000 103 vish dalvi 60000


Abbiamo inserito quattro righe e tutte le righe sono NON NULL. Pertanto, tutte le righe hanno un valore valido.

Ora creiamo un altro tavolo con EmpID e sal colonne come elencato in dipendente tavolo.

se esiste (SELECT nome da sys.tables where name = 'emp') drop table emp GO CREATE TABLE emp (empid INT, sal INT);


Ora, inserisci alcuni dati di esempio.

inserire in valori emp (100, 50000); inserire in valori emp (101, NULL); inserire in valori emp (102, NULL); inserire in valori emp (103, NULL);
seleziona * da emp; empid sal ----------- ----------- 100 50000 101 NULL 102 NULL 103 NULL

Si prega di notare che abbiamo inserito lo stesso EmpID dal dipendente tavolo nel emp tavolo, ma il sal la colonna è NULL per tre dipendenti.

Ora, vogliamo aggiornare la tabella emp e impostare il sal valore della colonna uguale a sal colonna nel dipendente tavolo. Nella seguente query, è necessario utilizzare un'espressione CASE con l'istruzione update.

UPDATE emp SET sal = (CASO QUANDO e2.sal È NULL THEN e1.sal ELSE e2.sal END) Dipendente e1 ENNER JOIN emp e2 ON e1.empid = e2.empid;


Nella query di cui sopra, stiamo controllando se il e2.sal colonna nel emp la tabella è NULL. Se è NULL, aggiorna il valore con sal colonna del dipendente tavolo o tenerlo come è in altre condizioni.

Ora, dopo l'aggiornamento, se si interroga il emp tabella, è possibile visualizzare il valore per sal colonna nel emp tavolo. Questo ha valori NULL aggiornati con dipendente tavolo sal colonna sulla base della corrispondenza EmpID da entrambe le tabelle usando join interno.

seleziona * da emp; empid sal ----------- ----------- 100 50000 101 2000 102 70000 103 60000