Глядя на это выражение:
cis.InvoiceStatus =
CASE
WHEN RTRIM(LTRIM(imd.[Invoice_PBK])) IS NULL THEN
'HELLO'
WHEN RTRIM(LTRIM(imd.Invoice_DType)) = 'RD' THEN
'233'
END
И этот симптом:
CIS.InvoiceStatus обновляется с NULL
Очевидный вывод ни WHEN
условие не выполнено, и поэтому результат выражения CASE
равен NULL
.
Возможно, вы хотели это, что сохранит исходное значение в этой ситуации:
cis.InvoiceStatus =
CASE
WHEN RTRIM(LTRIM(imd.[Invoice_PBK])) IS NULL THEN
'HELLO'
WHEN RTRIM(LTRIM(imd.Invoice_DType)) = 'RD' THEN
'233'
ELSE
cis.InvoiceStatus
END
Или, возможно, вы хотели, чтобы это также соответствовало пустому строковому значению:
cis.InvoiceStatus =
CASE
WHEN NULLIF(RTRIM(LTRIM(imd.[Invoice_PBK])),'') IS NULL THEN
'HELLO'
WHEN RTRIM(LTRIM(imd.Invoice_DType)) = 'RD' THEN
'233'
END
Стоит также указать, что два условия WHEN
рассматривают два разных столбца.
Наконец, это может быть стоит проекта очистки данных здесь. Необходимость LTRIM()
лишит вас шансов на использование индексов в этих полях (RTRIM()
немного менее вредно), и использование индексов снизит основную производительность базы данных.