当我运行这个
declare @short nchar(1) = '1';
declare @long nchar(5) = '123456';
select 'A' + CASE WHEN 1 = 1 THEN @short ELSE @long END + 'B'
我得到结果
-------
A1 B
SQL Server 似乎正在将 CASE 构造的结果填充为可能的最长返回值。这只发生在我使用变量而不是常量时。
奇怪的是,当我显式修剪变量时,结果是正确的,即
select 'A' + CASE WHEN 1 = 1 THEN rtrim(@short) ELSE @long END + 'B'
返回
----
A1B
这种行为是设计使然,可以通过服务器设置将其关闭吗?