SQL Server Använd en CASE Expression i en uppdatering

CASE-uttrycket används för att jämföra ett uttryck med en uppsättning uttryck i SQL. Resultatet av CASE-uttrycket är ett booleskt värde, true eller false. Vi kan använda olika DML-satser som INSERT, SELECT, DELETE och UPDATE med en CASE-uppsats. I denna Tech-Recipes handledning ser vi hur man använder ett CASE-uttryck med UPDATE-uttalanden.

Vi kan börja med att gå igenom ett exempel.

Börja med att skapa ett bord och namnge det "anställd".

Om det existerar (VÄLJ namn från sys.tables där namn = 'anställd') släpp tabellmedarbetare GÅ CREATE TABLE anställd (empid INT, ename VARCHAR (20), sal INT);


Infoga några provdata i anställd tabellen.

infoga i anställda värden (100, 'jon smith', 50000); infoga i anställningsvärden (101, 'mike', 2000); infoga i anställningsvärden (102, 'ab luther', 70000); infoga i anställda värden (103, "vish dalvi", 60000);
välj * från anställd; empid ename sal ----------- -------------------- ----------- 100 jon smith 50000 101 mike 2000 102 ab luther 70000 103 vish dalvi 60000


Vi har satt in fyra rader och alla rader är NON NULL. Således har alla rader ett giltigt värde.

Låt oss nu skapa en annan tabell med EmpID och sal kolumner som anges i anställd tabell.

om det finns (VÄLJ namn från sys.tables där namn = 'emp') släppt tabell emp GÄR CREATE TABLE emp (empid INT, sal INT);


Lägg nu in några provdata.

infoga i emp värden (100, 50000); infoga i emp-värden (101, NULL); infoga i emp värden (102, NULL); infoga i emp värden (103, NULL);
välj * från emp; empid sal ----------- ----------- 100 50000 101 NULL 102 NULL 103 NULL

Observera att vi har satt in samma EmpID från anställd bord i emp bord, men sal kolumn är NULL för tre anställda.

Nu vill vi uppdatera tabellen emp och ställa in sal kolumnvärde lika med sal kolumn i anställd tabell. I följande fråga måste vi använda ett CASE-uttryck med uppdateringsuppsättningen.

UPPDATERA emp SET-sal = (CASE när e2.sal ÄR NULL ÄR E1.sal ELSE e2.sal END) FRÅN MEDLEM E1 INNER JOIN emp e2 ON e1.empid = e2.empid;


I frågan ovan kontrollerar vi om eller inte e2.sal kolumn i emp bordet är NULL. Om det är NULL, uppdatera du värdet med sal kolumn av anställd bord eller håll det som det är i annat skick.

Nu, efter uppdatering, om du frågar på emp tabell, kan du se värdet för sal kolumn i emp tabell. Detta har NULL-värden uppdaterade med anställd tabell sal kolumn på grundval av matchning EmpID från båda tabellerna med hjälp av innerförband.

välj * från emp; empid sal ----------- ----------- 100 50000 101 2000 102 70000 103 60000