Je me demande si cela est possible du tout. Je souhaite 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.
sql
sql-update
case
pqsk
la source
la source
Réponses:
Vous ne pouvez pas utiliser une condition pour modifier la structure de votre requête, uniquement les données concernées. Vous pouvez faire ceci:
C'est sémantiquement le même, mais gardez simplement à l'esprit que les deux colonnes seront toujours mises à jour . Cela ne vous posera 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 du SQL dynamique. C'est cependant quelque chose que je vous encourage à éviter. La solution ci-dessus sera presque certainement suffisante pour ce que vous recherchez.
la source
la source
23
quelques secondes avant qu'il ne la publie. Je suis un copypaster rapide!* min ago
, il vous montrera l'heure exacte à laquelle il a été publié.Je souhaite modifier ou mettre à jour mon ContactNo en 8018070999 où il y a 8018070777 à l'aide de l'instruction Case
la source
Je sais que c'est une question très ancienne, mais cela a fonctionné pour moi:
Cordialement
la source
Je sais que c'est une question très ancienne et le problème est marqué comme résolu. Cependant, si quelqu'un avec un cas comme le mien où la table a un déclencheur pour la journalisation des données sur les événements de mise à jour, cela posera un problème. Les deux colonnes recevront la mise à jour et le journal fera des entrées inutiles. La façon dont j'ai fait
Maintenant, cela a un autre avantage qu'il n'a pas d'écritures inutiles sur la table comme les solutions ci-dessus.
la source
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
Exemple de tableau:
CREATE TABLE [dbo].[tblTest]( [ColX] [int] NULL, [ColY] [int] NULL, [ColConditional] [bit] NULL, [id] [int] IDENTITY(1,1) NOT NULL ) ON [PRIMARY]
Exemple 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 un conditionnel qui gère les valeurs nulles. Pour mon exemple, je suppose que vous avez écrit un tel conditionnel qui donne 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 modifie en fait 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 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 gère quand même.
la source