Je pense que je suis en quelque sorte proche de le faire fonctionner, mais pour une raison quelconque, je reçois toujours des erreurs.
J'ai la requête UPDATE suivante:
UPDATE DeviceAttribute
SET Details = CASE Name
WHEN 'Accessories' THEN @Accessories
WHEN 'Description' THEN @Description
WHEN 'Specification' THEN @Specification
ELSE Details
END
WHERE DeviceID = 10
Les paramètres sont renseignés par différents utilisateurs. Le problème auquel je suis confronté maintenant est que même lorsque vous souhaitez mettre à jour un seul champ, vous devez toujours remplir avec les anciennes données les autres paramètres. Par conséquent, je voudrais définir l'option IF @parameter IS NULL THEN garder la valeur qui est déjà stockée dans la base de données. J'ai essayé de trouver une solution et quelque chose comme la requête suivante semble être la solution mais je ne peux pas la faire fonctionner:
UPDATE DeviceAttribute
SET Details = CASE Name
WHEN 'Accessories' IS NOT NULL THEN @Accessories
WHEN 'Description' IS NOT NULL THEN @Description
WHEN 'Specification' IS NOT NULL THEN @Specification
ELSE Details
END
WHERE DeviceID = 10
LA BD est stockée dans SQL Server 2008
Merci d'avance pour l'aide.
EDIT pour clarifier:
La table d'origine ressemble à ceci
DeviceID|Name |Details |
10 |Accessories |earplugs |
10 |Description |protectors|
10 |Specification|BeatsByDre|
Pour des raisons de publication, j'ai fait une requête pour renverser la vapeur. Ainsi, lorsque la requête Select est exécutée, la table de retour ressemble à ce qui suit
DeviceID|Accessories|Description|Specification|
10 |earplugs |protectors |BeatsByDre |
J'ai créé une interface utilisateur pour permettre aux utilisateurs du système de mettre à jour les différents champs tels que Accessoires, Description, Spécifications. La mise à jour fonctionne si je mets à jour tous les champs avec la requête affichée en haut. Cependant, lorsque je laisse une zone de texte vide, j'obtiens une erreur indiquant que le @parameter manque une valeur. Donc, essayer de trouver une solution pour mettre à jour uniquement le champ où est écrit quelque chose. Donc, si @parameter IS NULL, conservez la valeur d'origine dans la base de données. J'ai trouvé une autre solution qui est vraiment proche de ce que je veux mais je ne peux pas le faire fonctionner. Voici l'autre solution: /programming/9387839/mysql-if-not-null-then-display-1-else-display-0
UPDATE
instruction l'interface utilisateur envoie-t-elle à la base de données?'@'Accessories
n'a pas de sens pour moi.Réponses:
Je pense que cela résoudra le problème:
ou ceci (pour éviter les mises à jour redondantes):
ou ceci, en utilisant un constructeur de valeur de table:
la source