У меня есть таблица базы данных "table_2" в БД Microsoft SQL Server 2016.
CREATE TABLE table_2
(
[created_date] [date] NULL,
[complete_hour] [int] NULL,
[col_percent] [float] NULL,
[notes] [nvarchar] (400)
)
INSERT INTO table_2
VALUES ('2017-05-31', 10, 5.8, 'A'),
('2019-06-14', 11, 9.9, NULL)
Теперь я хочу добавить ', B'
к значениям в примечаниях столбцов, если примечания столбцов имеют значение, которое:
- NOT NULL и
- NOT пусто и
- NOT 'B'
Я хочу добавить / вставить / добавить 'B'в примечаниях к столбцам, если примечания к столбцам имеют значение NULL.
Что я пробовал:
UPDATE table_2
SET notes=notes+', '+'B'
WHERE col_percent = 5.8
Но выдает ошибку:
Сообщение 8152, уровень 16, состояние 13, строка 14
Строка или двоичные данные будут обрезаны.
При попытке
UPDATE table_2
SET notes=notes+', '+'B'
WHERE col_percent = 9.9
Отображается (1 row affected)
, но ясм. те же данные и примечания к столбцам во втором ряду все еще имеет значение NULL.
Я немного осмотрелся и, кажется, что изменение типа данных примечаний столбцов с nvarchar на varchar (50) решит эту проблему.(Я проверил это) Но в реальном случае я не могу изменить тип данных.
Вопрос: Как я могу это сделать, не меняя тип данных примечаний к столбцам?
Обновление: Объявлен столбец примечаний как [notes] [nvarchar] (400)
.Это решает проблему для ненулевых значений в примечаниях столбца.
Но для значений NULL (например, для col_percent = 9,9) он показывает (1 row affected)
, но данные остаются неизменными.
Решение Zeina обновляется, когда столбец notes имеет значение NULL, но также добавляет начальную запятую.
Решение, которое я в итоге использовал (может быть, и получше):
UPDATE table_2
SET notes = CASE
WHEN notes = 'B' THEN 'B'
WHEN notes IS NULL THEN 'B'
WHEN notes = '' THEN 'B'
ELSE notes+', '+'B'
END
WHERE col_percent = 5.8