Microsoftによると
ISNULL(check_expression, replacement_value)
replacement_value check_expressionのタイプに暗黙的に変換可能なタイプである必要があります 。 'xy'+NULLのタイプに注意してください VARCHAR(3)です 。このため、文字列'ABCDEFGHIJ' VARCHAR(3)にキャストされます したがって、トリミングされます。
VARCHAR(2)ではない理由は奇妙に聞こえます 、しかしこれはその通りです-'xy'より1文字長い 。この'xy'+NULLのタイプを自分で確認してください 式CASE WHEN 1=2 THEN 'XYZ' ELSE NULL ENDの場合と同じです。 、これはNULL ただし、VARCHAR(3)と暗黙的に互換性があります 。
式'xy'+NULLのようです 知覚される長さは、'xy'として計算できます。 文字列の長さ(2)プラスNULLごとに1 追加した。たとえば、'xy'+NULL+NULLのタイプ VARCHAR(4)です 、'xy'+NULL+NULL+NULLと入力します VARCHAR(5)です など-この