Menurut dokumentasi Microsoft , untuk fungsi:
ISNULL(check_expression, replacement_value)
replacement_value
harus dari tipe yang secara implisit dapat dikonversi ke tipe check_expression
. Perhatikan bahwa ketik untuk 'xy'+NULL
adalah VARCHAR(3)
. Karena ini string Anda 'ABCDEFGHIJ'
dilemparkan ke VARCHAR(3)
dan dengan demikian dipangkas.
Kedengarannya aneh mengapa bukan VARCHAR(2)
, tapi beginilah adanya - satu karakter lebih panjang dari 'xy'
. Anda dapat bermain dengan SQLFiddle
ini dan lihat sendiri jenis itu untuk 'xy'+NULL
sama dengan ekspresi CASE WHEN 1=2 THEN 'XYZ' ELSE NULL END
, yaitu NULL
tetapi secara implisit kompatibel dengan VARCHAR(3)
.
Tampaknya untuk ekspresi 'xy'+NULL
panjang yang dirasakan dapat dihitung sebagai 'xy'
panjang string (2) ditambah 1 untuk setiap NULL
ditambahkan. Misalnya, ketik 'xy'+NULL+NULL
adalah VARCHAR(4)
, ketikkan 'xy'+NULL+NULL+NULL
adalah VARCHAR(5)
dan seterusnya - lihat SQLFiddle
ini . Ini sangat aneh, tapi begitulah cara kerja MS SQL Server 2008 dan 2012.