Es ist ein bekanntes Verhalten
Von MSDN
Der Wert check_expression zurückgegeben wird, wenn es nicht NULL ist; andernfalls wird ersatzwert zurückgegeben, nachdem implizit in den Typ von check_ausdruck konvertiert wurde, wenn die Typen unterschiedlich sind. Ersetzungswert kann abgeschnitten werden, wenn Ersetzungswert länger als Check_Ausdruck ist.
Verwenden COALESCE
zu über kommen dieses Thema
SELECT COALESCE(a, b) From yourtable
Hier eine Demo ist
CREATE TABLE #nulltest
(
a CHAR(5),
b CHAR(10)
)
INSERT INTO #nulltest
VALUES ('12345','1234567890'),
(NULL,'1234567890')
SELECT a,
b,
ISNULL(a, b) AS Isnull_Result,
COALESCE(a, b) AS Coalesce_Result
FROM #nulltest
Ergebnis:
╔═══════╦════════════╦═══════════════╦═════════════════╗
║ a ║ b ║ Isnull_Result ║ Coalesce_Result ║
╠═══════╬════════════╬═══════════════╬═════════════════╣
║ 12345 ║ 1234567890 ║ 12345 ║ 12345 ║
║ NULL ║ 1234567890 ║ 12345 ║ 1234567890 ║
╚═══════╩════════════╩═══════════════╩═════════════════╝
Überprüfen Sie, ob eine Variable mit der Größe von 5 nur deklariert ... –