2011-07-26 87 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() 
相关问题