2011-07-26 88 views
9

我有一個SQL存儲過程接受VARCHAR(MAX)類型的參數。 據我所知,並根據我所瞭解,對於這樣的字符串的最大大小爲2GB: MSDN字符串或二進制數據將被截斷SQL錯誤

出於某種原因,超過8KB傳遞字符串較大,當我得到:

字符串或二進制數據將被截斷。

爲什麼我會收到此錯誤消息,以及如何解決?

+1

建議您發佈的存儲過程和調用代碼 –

+0

是你能夠發佈其餘的proc?它可能與該參數無關。 – SteveCav

+0

確實文檔不清楚;看起來限制是8k,除非你寫「max」......但是,我知道使用oracle dbms,是varchar被限制爲4k;我可能是錯誤的,我沒有仔細檢查它,我更喜歡clob/blob爲大量的數據 – ShinTakezou

回答

8

根據BoL(您指定的鏈接),解釋存在差異。 可以在查詢中使用的最大數量(n部分)爲8000.出於存儲目的,varchar(max)可以在磁盤上處理2GB。

這僅僅是用於查詢和存儲目的的數據類型的解釋。所以底線,你只能在一個查詢中使用8000個字符....

8

避免這個問題,你必須先投你的字符串varchar(max)

column = cast(other_column as varchar(max)) 

這樣任何字符串超過最大長(8000或4000,取決於版本)將被截斷爲最大長度。

1

你正在傳遞一個字符串大於比在數據庫中的列吧? 嘗試增加列的大小。

1

您在數據庫中傳遞的字符串大於

就像你的數據庫表如下:

EXECUTIVE varchar(15) 

但是就像你插入的字符串(在vb.net):

cmd.Parameters.Add("@EXECUTIVE", Data.SqlDbType.VarChar, 150).Value = CmbExecutive.Text.ToString() 
相關問題