Все ветви выражения CASE
должны иметь одинаковый тип. В этом случае (без каламбура) похоже, что SQL Server использует целочисленный тип и выполняет неявное приведение SU
к целому числу. Проблема заключается в том, что максимальное значение для целого числа в SQL Server составляет примерно 2,1 миллиарда, и в приведенном вами примере используется значение 7000952682
, следовательно, переполнение.
У вас есть два варианта здесь. Вы можете сделать все varchar
:
CASE WHEN @SU IS NULL OR @SU = '' THEN '1' ELSE [SU] END
Или вы можете сделать все числовым, используя тип, который не будет переполнен, например,
CASE WHEN @SU IS NULL OR @SU = ''
THEN CAST(1 AS numeric(20, 6))
ELSE CAST([SU] AS numeric(20, 6)) END
В качестве примечания вы можете написать первую часть вашего выражения CASE
более кратко, используя COALESCE
:
CASE WHEN COALESCE(@SU, '') = '' THEN '1' ELSE [SU] END