Ich denke, ich bin irgendwie nah dran, es zum Laufen zu bringen, aber aus irgendeinem Grund bekomme ich immer noch Fehler.
Ich habe die folgende UPDATE-Abfrage:
UPDATE DeviceAttribute
SET Details = CASE Name
WHEN 'Accessories' THEN @Accessories
WHEN 'Description' THEN @Description
WHEN 'Specification' THEN @Specification
ELSE Details
END
WHERE DeviceID = 10
Die Parameter werden von verschiedenen Benutzern ausgefüllt. Das Problem, mit dem ich jetzt konfrontiert bin, ist, dass Sie selbst dann, wenn Sie ein einzelnes Feld aktualisieren möchten, die anderen Parameter mit den alten Daten ausfüllen müssen. Daher möchte ich die Option IF @parameter IS NULL setzen, DANN den Wert behalten, der bereits in der DB gespeichert ist. Ich habe versucht, eine Lösung zu finden, und so etwas wie die folgende Abfrage scheint die Lösung zu sein, aber ich kann sie nicht zum Laufen bringen:
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
Die Datenbank wird in SQL Server 2008 gespeichert
Vielen Dank im Voraus für die Hilfe.
EDIT zur Verdeutlichung:
Der ursprüngliche Tisch sieht so aus
DeviceID|Name |Details |
10 |Accessories |earplugs |
10 |Description |protectors|
10 |Specification|BeatsByDre|
Aus Veröffentlichungsgründen habe ich eine Abfrage gestellt, um den Spieß umzudrehen. Wenn die Select-Abfrage ausgeführt wird, sieht die Rückgabetabelle wie folgt aus
DeviceID|Accessories|Description|Specification|
10 |earplugs |protectors |BeatsByDre |
Ich habe eine Benutzeroberfläche erstellt, mit der Systembenutzer die verschiedenen Felder wie Zubehör, Beschreibung, Spezifikation aktualisieren können. Das Update funktioniert, wenn ich alle Felder mit der oben angezeigten Abfrage aktualisiere. Wenn ich jedoch ein Textfeld leer lasse, wird die Fehlermeldung angezeigt, dass dem @ -Parameter ein Wert fehlt. Versuchen Sie also, eine Lösung zu finden, um nur das Feld zu aktualisieren, in dem etwas geschrieben ist. Wenn also @parameter NULL ist, behalten Sie den ursprünglichen Wert in der Datenbank bei. Ich habe eine andere Lösung gefunden, die meinem Wunsch sehr nahe kommt, sie aber nicht zum Laufen bringt. Hier ist die andere Lösung: /programming/9387839/mysql-if-not-null-then-display-1-else-display-0
quelle
UPDATE
Anweisung sendet die Benutzeroberfläche an die Datenbank?'@'Accessories
ergibt für mich keinen Sinn.Antworten:
Ich denke, das wird das Problem lösen:
oder dies (um redundante Updates zu vermeiden):
oder dies unter Verwendung eines Tabellenwertkonstruktors:
quelle