Почему, когда вы запускаете это, вы получаете 2.00 как ответ?Почему литье удерживается внутри фраз?
declare @temp int = 2
select CASE WHEN @temp = 1 THEN cast(@temp as decimal(5, 2))
WHEN @temp = 2 THEN @temp
ELSE NULL
END
Но если запустить это, вы получите как ответ при выборе только @ temp2
declare @temp2 int = 2
select CAST(@temp2 as decimal(5,2))
select @temp2
мост правильно:
Возвращает максимальный тип приоритета из множества типы в result_expressions и необязательное else_result_expression. (Source)
Ах, вы правы! – Ryan
Не совсем, когда вы меняете операторы 2 'WHEN', он должен« видеть »первое возвращаемое значение, которое остается int. Таким образом, это больше похоже на то, что оно передается в тип данных, который может содержать обе возможности. Нет? – fancyPants
@tombom Да, я верю, что так оно и работает. Я думаю, вы могли бы получить SQL_VARIANT, получая выход, если бы там было достаточно сумасшествия. Я добавлю ваше лучшее объяснение к моему ответу. – Bridge