T-SQL: Utilisation d’un CASE dans une instruction UPDATE pour mettre à jour certaines colonnes en fonction d’une condition

Je me demande si cela est possible du tout. Je veux mettre à jour la colonne x si une condition est vraie, sinon la colonne y serait mise à jour

UPDATE table SET (CASE (CONDITION) WHEN TRUE THEN columnx ELSE columny END) = 25 

J’ai cherché partout, essayé certaines choses et je suis incapable de trouver une solution. Je pense que ce n’est pas possible, mais j’ai pensé que je demanderais ici et voir si quelqu’un l’a déjà fait. Merci d’avance.

Vous ne pouvez pas utiliser une condition pour modifier la structure de votre requête, mais uniquement les données impliquées. Vous pourriez faire ceci:

 update table set columnx = (case when condition then 25 else columnx end), columny = (case when condition then columny else 25 end) 

C’est sémantiquement identique, mais gardez à l’esprit que les deux colonnes seront toujours mises à jour . Cela ne vous causera probablement aucun problème, mais si vous avez un volume transactionnel élevé, cela pourrait entraîner des problèmes de concurrence.

La seule façon de faire spécifiquement ce que vous demandez est d’utiliser un SQL dynamic. C’est cependant quelque chose que je vous encourage à éviter. La solution ci-dessus sera presque certainement suffisante pour ce que vous recherchez.

 UPDATE table SET columnx = CASE WHEN condition THEN 25 ELSE columnx END, columny = CASE WHEN condition THEN columny ELSE 25 END 

entrer la description de l'image ici

Je souhaite modifier ou mettre à jour mon ContactNo au 8018070999 où 8018070777 utilise l’instruction Case

 update [Contacts] set contactNo=(case when contactNo=8018070777 then 8018070999 else contactNo end) 

entrer la description de l'image ici

Je pense que vous pouvez omettre de mettre à jour les colonnes “non souhaitées” en ajustant les autres réponses comme suit:
update table set columnx = (case when condition1 then 25 end), columny = (case when condition2 then 25 end)

Si je comprends bien, cela ne sera mis à jour que lorsque la condition sera remplie.

Après avoir lu tous les commentaires, c’est le plus efficace:
Update table set ColumnX = 25 where Condition1 Update table set ColumnY = 25 where Condition1

Tableau d’échantillon:
CREATE TABLE [dbo].[tblTest]( [ColX] [int] NULL, [ColY] [int] NULL, [ColConditional] [bit] NULL, [id] [int] IDENTITY(1,1) NOT NULL ) ON [PRIMARY]
Données d’échantillon:
Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 0) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 0) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 1) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 1) Insert into tblTest (ColX, ColY, ColConditional) values (1, null, null) Insert into tblTest (ColX, ColY, ColConditional) values (2, null, null) Insert into tblTest (ColX, ColY, ColConditional) values (null, 1, null) Insert into tblTest (ColX, ColY, ColConditional) values (null, 2, null)

Maintenant, je suppose que vous pouvez écrire un conditionnel qui gère les valeurs NULL. Pour mon exemple, je suppose que vous avez écrit une condition qui a la valeur True, False ou Null. Si vous avez besoin d’aide, faites le moi savoir et je ferai de mon mieux.

Maintenant, exécuter ces deux lignes de code ne change en fait que X à 25 si et seulement si ColConditional est True (1) et Y à 25 si et seulement si ColConditional est False (0)

Update tblTest set ColX = 25 where ColConditional = 1 Update tblTest set ColY = 25 where ColConditional = 0

PS L’affaire nulle n’a jamais été mentionnée dans la question initiale ni dans les mises à jour de la question, mais comme vous pouvez le constater, cette réponse très simple les gère de toute façon.