了解NVARCHAR(MAX) 的截斷問題
建立動態SQL 查詢時,確保不會導致字串串聯操作至關重要在意外的截斷中。在這種情況下,@Query 面臨的問題是,儘管其 NVARCHAR(MAX) 資料類型被截斷為 4000 個字符,但需要進行調查。
隱式轉換問題
罪魁禍首在於在隱式轉換中。當連接包含 Unicode/nChar/nVarChar 值的字串時,SQL Server 會自動將它們轉換為限制性更強的資料類型 nVarChar(4000)。此轉換在任何明確轉換為指派給變數 @Query 的 NVARCHAR(MAX) 之前執行。
避免截斷的簡單解
補救措施是明確強制在任何串聯操作之前轉換為 nVarChar(MAX)。透過使用 CAST('' as nVarChar(MAX)) 初始化 @Query,後續的串聯操作將附加到已定義為最大容量的字串,從而防止截斷。
克服 8000 個字符限制
如果最大限制為 8000 個字符,則表示轉換為 VarChar(8000) 由於缺少 Unicode 資料。類似地,可以採用明確型別轉換來強制轉換為 nVarChar(MAX)。
文字字串約束
值得注意的是,即使使用NVARCHAR(MAX) ,單一不間斷的文字字串不能超過4000 個(對於VarChar 則為8000 個)字元。為了避免截斷,應使用連接來分解此類字串。
以上是為什麼我的 NVARCHAR(MAX) 變數在 SQL Server 動態 SQL 中被截斷?的詳細內容。更多資訊請關注PHP中文網其他相關文章!