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, la mise à jour ne se fera 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 des échantillons :
CREATE TABLE [dbo].[tblTest](
[ColX] [int] NULL,
[ColY] [int] NULL,
[ColConditional] [bit] NULL,
[id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
Exemples de données :
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 une conditionnelle qui gère les nuls. Pour mon exemple, je suppose que vous avez écrit une telle condition qui évalue à True, False ou Null. Si vous avez besoin d'aide à ce sujet, faites-le moi savoir et je ferai de mon mieux.
Maintenant, l'exécution de ces deux lignes de code change effectivement X en 25 si et seulement si ColConditional est True(1) et Y en 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
P.S. Le cas nul n'a jamais été mentionné dans la question originale ou dans les mises à jour de la question, mais comme vous pouvez le voir, cette réponse très simple les traite quand même.
0 votes
En supposant qu'ils soient tous dans la même table, oui. Vous pouvez toujours l'exécuter dans une transaction, et revenir en arrière en cas d'erreur, pour voir par vous-même.
0 votes
Je ne suis pas sûr de ce que vous voulez dire. J'ai essayé de mettre une condition pour la colonne, mais cela ne fonctionne pas. Cela fonctionne pour une instruction de sélection, mais pas pour une instruction de mise à jour.(select (case (condition) when true then columnx else columny end) from myTable.... la mise à jour ne fonctionne pas, et je vois pourquoi. Il ne semble pas y avoir de moyen de la faire fonctionner.