Laut Microsoft Dokumentation , für Funktion:
ISNULL(check_expression, replacement_value)
replacement_value
muss von einem Typ sein, der implizit in den Typ von check_expression
konvertierbar ist . Beachten Sie diesen Typ für 'xy'+NULL
ist VARCHAR(3)
. Aus diesem Grund Ihre Zeichenfolge 'ABCDEFGHIJ'
wird in VARCHAR(3)
umgewandelt und somit getrimmt.
Es klingt seltsam, warum es nicht VARCHAR(2)
ist , aber so ist es - ein Zeichen länger als 'xy'
. Sie können mit diesem SQLFiddle
spielen und überzeugen Sie sich selbst von diesem Typ für 'xy'+NULL
ist dasselbe wie für den Ausdruck CASE WHEN 1=2 THEN 'XYZ' ELSE NULL END
, was NULL
ist ist aber implizit kompatibel zu VARCHAR(3)
.
Es scheint, dass für den Ausdruck 'xy'+NULL
Die wahrgenommene Länge kann als 'xy'
berechnet werden Zeichenfolgenlänge (2) plus 1 für jeden NULL
hinzugefügt. Geben Sie beispielsweise 'xy'+NULL+NULL
ein ist VARCHAR(4)
, geben Sie für 'xy'+NULL+NULL+NULL
ein ist VARCHAR(5)
und so weiter - sehen Sie sich dieses SQLFiddle
an . Das ist extrem seltsam, aber so funktionieren MS SQL Server 2008 und 2012.