Theo tài liệu của Microsoft , cho chức năng:
ISNULL(check_expression, replacement_value)
replacement_value phải thuộc loại có thể chuyển đổi hoàn toàn thành loại check_expression . Lưu ý rằng loại cho 'xy'+NULL là VARCHAR(3) . Do đó, chuỗi của bạn 'ABCDEFGHIJ' được truyền tới VARCHAR(3) và do đó được cắt bớt.
Nghe có vẻ lạ tại sao nó không phải là VARCHAR(2) , nhưng đây là cách - một ký tự dài hơn 'xy' . Bạn có thể chơi với SQLFiddle
này và tự xem loại cho 'xy'+NULL giống như đối với biểu thức CASE WHEN 1=2 THEN 'XYZ' ELSE NULL END , là NULL nhưng hoàn toàn tương thích với VARCHAR(3) .
Có vẻ như đối với biểu thức 'xy'+NULL chiều dài cảm nhận có thể được tính là 'xy' độ dài chuỗi (2) cộng với 1 cho mọi NULL thêm. Ví dụ:loại 'xy'+NULL+NULL là VARCHAR(4) , nhập cho 'xy'+NULL+NULL+NULL là VARCHAR(5) v.v. - hãy xem SQLFiddle
này . Điều này cực kỳ kỳ lạ, nhưng đó là cách MS SQL Server 2008 và 2012 hoạt động.