「NVARCHAR(MAX) 截斷仍然發生:了解隱式轉換」
儘管現代SQL Server 版本中存在NVARCHAR(MAX) 的NV誤解保存大量數據,用戶可能會遇到像這樣被截斷到4000字元的情況實例:
DECLARE @Query NVARCHAR(max); SET @Query = 'SELECT...' -- some of the query gets set here SET @Query = @Query + '...' -- more query gets added on, etc. -- later on... PRINT LEN(@Query) -- Prints out 4273, which is correct as far as I can tell PRINT @Query -- Truncates value to 4000 characters EXEC sp_executesql @Query -- totally crashes due to malformed (truncated) query
根本原因:隱式轉換
問題源自於隱式轉換。將字串與 Unicode 字元連接時,SQL Server 會自動將結果轉換為 NVARCHAR(4000),而不會發出警告或截斷指示。即使聲明用於儲存結果的變數是 NVARCHAR(MAX),也會發生這種情況。
解決方案:強制明確轉換
為了防止隱式轉換並確保保留大的數據,始終使用CAST 進行預先連接:
SET @Query = CAST('' as nVarChar(MAX)) -- Force implicit conversion to nVarChar(MAX) + 'SELECT...' -- some of the query gets set here + '...' -- more query gets added on, etc.
透過將空字串轉換為NVARCHAR(MAX), SQL Server 被明確指示將整個字串處理為NVARCHAR(MAX)。這消除了截斷問題。
其他注意事項
以上是為什麼 NVARCHAR(MAX) 仍然會截斷 SQL Server 中的字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!