これを実行すると
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
これは仕様による動作ですか? サーバー設定でオフにすることはできますか?