Скорее всего, DOID
- это столбец nvarchar(n)
- тогда это очевидно: ваше CASE
выражение должно возвращать одинаковый тип данных для всех путей, и поскольку первое предложение WHEN
возвращает INT
, все другие пути также должны возвращать INT
, и если они этого не делают, SQL Server преобразует свои возвращаемые значения в INT
, что вызывает исключение.
Также: поскольку вы обновляете столбец DOID
, вы должны использовать его собственный тип данных - поэтому ваше первое предложение WHEN
должно вернуть a nvarchar(n)
вместо INT
.
Попробуйте вместо этого код:
UPDATE Quotation_T
SET DOID = CASE
WHEN DOID = '' THEN CAST(19 AS NVARCHAR(20))
WHEN DOID LIKE '%10%' THEN DOID
WHEN DOID != '' THEN (DOID + N',20')
END
Теперь все предложения WHEN
правильно возвращают тип данных, который ожидает DOID
, обновляемый, и не требуется никаких неявных преобразований.