Я думаю, что я как-то близок, чтобы заставить это работать, но по некоторым причинам я все еще получаю ошибки.
У меня есть следующий запрос ОБНОВЛЕНИЕ:
UPDATE DeviceAttribute
SET Details = CASE Name
WHEN 'Accessories' THEN @Accessories
WHEN 'Description' THEN @Description
WHEN 'Specification' THEN @Specification
ELSE Details
END
WHERE DeviceID = 10
Параметры заполняются разными пользователями. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что даже если вы хотите обновить одно поле, вам все равно придется заполнить старыми данными другие параметры. Поэтому я хотел бы установить опцию IF @parameter IS NULL THEN, чтобы сохранить значение, которое уже сохранено в БД. Я попытался найти какое-то решение, и похоже что-то вроде следующего запроса, но я не могу заставить его работать:
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
БД хранится в SQL Server 2008
Заранее спасибо за помощь.
РЕДАКТИРОВАТЬ для уточнения:
Оригинальная таблица выглядит так
DeviceID|Name |Details |
10 |Accessories |earplugs |
10 |Description |protectors|
10 |Specification|BeatsByDre|
По причинам публикации я сделал запрос, чтобы перевернуть таблицы. Таким образом, при выполнении запроса Select таблица возврата выглядит следующим образом
DeviceID|Accessories|Description|Specification|
10 |earplugs |protectors |BeatsByDre |
Я создал пользовательский интерфейс, чтобы пользователи системы могли обновлять различные поля, такие как Аксессуары, Описание, Спецификация. Обновление работает, если я обновляю все поля с помощью запроса, показанного вверху. Однако, когда я оставляю текстовое поле пустым, я получаю сообщение об ошибке, что в @parameter отсутствует значение. Так что пытаясь найти решение, нужно обновить только ту область, где что-то написано. Поэтому, если @parameter IS NULL, сохраните исходное значение в БД. Я нашел другое решение, которое действительно близко к тому, что я хочу, но не может заставить его работать. Вот другое решение: /programming/9387839/mysql-if-not-null-then-display-1-else-display-0
источник
UPDATE
утверждение пользовательский интерфейс отправляет в базу данных?'@'Accessories
не имеет смысла для меня.Ответы:
Я думаю, что это решит проблему:
или это (чтобы избежать избыточных обновлений):
или это, используя конструктор табличных значений:
источник