Datatypes

為什麼 SQL Server 會在表達式中截斷我的 nvarchar(max) 字元串?

  • May 26, 2016

看起來表達式中的第二個變數正在確定我的第一個變數的最大長度。

一個更容易解釋的例子:

DECLARE @MyDest AS NVARCHAR(MAX) = 'Some long text, for testing';
DECLARE @MySrc AS NVARCHAR(6) = '';

SELECT @MyDest = ISNULL(NULLIF(@MySrc, N''), @MyDest);

SELECT @MyDest;

結果是'Some l'我所期望'Some long text, for testing'的。

這是我正在嘗試修復的更複雜錯誤的簡化版本。這是 SQL Server 中的錯誤還是我應該以不同的方式執行此操作?

它正在截斷,因為 replacement_value 參數被轉換為與 check_expression 相同的數據類型。

來自https://msdn.microsoft.com/en-us/library/ms184325.aspx

ISNULL ( check_expression , replacement_value )

replacement_value 必須是可隱式轉換為 check_expresssion 類型的類型。

返回類型 返回與 check_expression 相同的類型。如果提供文字 NULL 作為 check_expression,則返回 replacement_value 的數據類型。如果提供了文字 NULL 作為 check_expression 並且沒有提供 replacement_value,則返回一個 int。

引用自:https://dba.stackexchange.com/questions/139631