0
当我运行这个SQL Server是填充字符串变量
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服务器似乎被填充的情况下结果构建了尽可能长的返回值。这只发生在我使用变量的时候,而不是常量。
奇怪的是,当我明确地修剪变量,结果是正确的,即
select 'A' + CASE WHEN 1 = 1 THEN rtrim(@short) ELSE @long END + 'B'
回报
----
A1B
这种行为是由设计,并可以将它通过一台服务器被关闭设置?
不会发生与Varchar,顺便说一句,只是与字符类型。显然,CASE构造被视为具有最长可能长度的char类型。所以我想这是设计。 – cdonner