Невозможно вставить значение NULL в столбец (ОБНОВЛЕНИЕ с CASE, SQL Server) - PullRequest
0 голосов
/ 04 декабря 2018

Я хотел бы обновить таблицу, используя выражение CASE, но я получаю ошибку, однако я не УСТАНАВЛИВАЮ значения NULL:

Невозможно вставить значение NULL в столбец 'Столбец2', стол «Таблица1»;столбец не допускает пустых значений.ОБНОВЛЕНИЕ не удается.

Мой код:

UPDATE [Table 1]
SET [Column1] = '2', 
    [Column2] = CASE 
                   WHEN [Column3] = 'A' THEN '1'
                   WHEN [Column3] = 'B' THEN '2'
                   WHEN [Column3] = 'C' THEN '3'
                END
WHERE [Column4] IN ('1118')

Есть предложения, что я делаю не так?

Ответы [ 4 ]

0 голосов
/ 04 декабря 2018

Вам необходимо добавить и выражение «ELSE» к своему заявлению CASE, вы можете сделать это значением столбца или определенным значением по вашему выбору

UPDATE [Table 1]
SET [Column1] = '2', [Column2] = 

CASE 
    WHEN [Column3] = 'A' THEN '1'
    WHEN [Column3] = 'B' THEN '2'
    WHEN [Column3] = 'C' THEN '3'
    ELSE [Column2]
END

WHERE [Column4] IN ('1118')

ИЛИ

UPDATE [Table 1]
SET [Column1] = '2', [Column2] = 

CASE 
    WHEN [Column3] = 'A' THEN '1'
    WHEN [Column3] = 'B' THEN '2'
    WHEN [Column3] = 'C' THEN '3'
    ELSE '000' --your choice
END

WHERE [Column4] IN ('1118')
0 голосов
/ 04 декабря 2018

используйте оператор выбора для проверки значений, которые вы будете устанавливать, что должно дать вам ответ относительно того, что здесь происходит не так.

Select [Column1] = '2', [Column2] = 
CASE 
    WHEN [Column3] = 'A' THEN '1'
    WHEN [Column3] = 'B' THEN '2'
    WHEN [Column3] = 'C' THEN '3'
END
,[Column3] --possibly has a value that is not covered by case stmt
FROM [Table 1]
WHERE [Column4] IN ('1118')
0 голосов
/ 04 декабря 2018

Исходя из ошибки, столбец 2 в таблице [Таблица 1] является «не обнуляемым», и именно поэтому вы получаете ошибку.Может быть 2 решения: 1. Либо вы измените определение таблицы, чтобы разрешить null, либо обновите свой оператор case, если он соответствует условиям.Также будет полезно, если вы можете разместить данные, которые есть в таблице, где column4 равно 1118.

0 голосов
/ 04 декабря 2018

Значение в [Column3] отсутствует в списке значений, указанных в вашем операторе CASE (т. Е. Это не A, B или C), поэтому результат оператора равен NULL.CASE неявно возвращает ELSE NULL, если не указано иное.

Из DOCS

ELSE else_result_expression Возвращается ли выражение, еслиникакая операция сравнения не оценивается как ИСТИНА.Если этот аргумент пропущен и никакая операция сравнения не оценивается как TRUE, CASE возвращает NULL .else_result_expression - любое допустимое выражение.Типы данных else_result_expression и любого result_expression должны быть одинаковыми или неявным преобразованием.

Для обработки этой возможности добавьте предложение ELSE, которое возвращает либо существующее значение (показано ниже), либозначение по умолчанию на ваш выбор.Например:

UPDATE [Table 1]
SET [Column1] = '2', [Column2] = 

CASE 
    WHEN [Column3] = 'A' THEN '1'
    WHEN [Column3] = 'B' THEN '2'
    WHEN [Column3] = 'C' THEN '3'
    ELSE [Column2]
END

WHERE [Column4] IN ('1118')
...