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