我有一個SQL存儲過程接受VARCHAR(MAX)類型的參數。 據我所知,並根據我所瞭解,對於這樣的字符串的最大大小爲2GB: MSDN字符串或二進制數據將被截斷SQL錯誤
出於某種原因,超過8KB傳遞字符串較大,當我得到:
字符串或二進制數據將被截斷。
爲什麼我會收到此錯誤消息,以及如何解決?
我有一個SQL存儲過程接受VARCHAR(MAX)類型的參數。 據我所知,並根據我所瞭解,對於這樣的字符串的最大大小爲2GB: MSDN字符串或二進制數據將被截斷SQL錯誤
出於某種原因,超過8KB傳遞字符串較大,當我得到:
字符串或二進制數據將被截斷。
爲什麼我會收到此錯誤消息,以及如何解決?
根據BoL(您指定的鏈接),解釋存在差異。 可以在查詢中使用的最大數量(n部分)爲8000.出於存儲目的,varchar(max)可以在磁盤上處理2GB。
這僅僅是用於查詢和存儲目的的數據類型的解釋。所以底線,你只能在一個查詢中使用8000個字符....
避免這個問題,你必須先投你的字符串varchar(max)
:
column = cast(other_column as varchar(max))
這樣任何字符串超過最大長(8000或4000,取決於版本)將被截斷爲最大長度。
你正在傳遞一個字符串大於比在數據庫中的列吧? 嘗試增加列的大小。
您在數據庫中傳遞的字符串大於列。
就像你的數據庫表如下:
EXECUTIVE varchar(15)
但是就像你插入的字符串(在vb.net):
cmd.Parameters.Add("@EXECUTIVE", Data.SqlDbType.VarChar, 150).Value = CmbExecutive.Text.ToString()
建議您發佈的存儲過程和調用代碼 –
是你能夠發佈其餘的proc?它可能與該參數無關。 – SteveCav
確實文檔不清楚;看起來限制是8k,除非你寫「max」......但是,我知道使用oracle dbms,是varchar被限制爲4k;我可能是錯誤的,我沒有仔細檢查它,我更喜歡clob/blob爲大量的數據 – ShinTakezou