【问题标题】:String or binary data would be truncated SQL Error字符串或二进制数据将被截断 SQL 错误
【发布时间】:2011-07-26 05:15:14
【问题描述】:

我有一个接受 VARCHAR(MAX) 类型参数的 SQL 存储过程。 据我所知,根据我所读到的所有信息,此类字符串的最大大小为 2GB: MSDN

由于某种原因,当传递大于 8KB 的字符串时,我得到:

字符串或二进制数据将被截断。

为什么我会收到此错误消息,我该如何解决?

【问题讨论】:

  • 建议您发布存储过程和调用代码
  • 你能发布剩下的过程吗?它可能与该参数无关。
  • 确实文档不清楚;似乎限制是 8k,除非你写“max”......但是,我知道使用 oracle dbms 是 varchar 限制为 4k;我可能错了,我没有仔细检查过,我更喜欢 clob/blob 来处理任意大的数据
  • 抱歉误报,当开始复制程序时,我看到了一些奇怪的东西(将字符串复制到错误的参数)......所以,问题解决了。 10 倍很多

标签: sql tsql varchar


【解决方案1】:

根据 BoL(您指定的链接),解释有所不同。 您可以在查询中使用的最大数量(n 部分)是 8000。出于存储目的,varchar(max) 可以在磁盘上处理 2GB。

这只是用于查询和存储目的的数据类型解释。所以最重要的是,您只能在查询中使用 8000 个字符....

【讨论】:

    【解决方案2】:

    为避免此问题,您必须先将字符串转换为varchar(max)

    column = cast(other_column as varchar(max))
    

    这样任何长度超过最大值(8000 或 4000,取决于版本)的字符串都将被截断为最大长度。

    【讨论】:

      【解决方案3】:

      您传递的字符串比数据库中的列大,对吗? 尝试增加列的大小。

      【讨论】:

        【解决方案4】:

        您传递的 字符串 比数据库中的 大。

        就像你的数据库表如下:

         EXECUTIVE  varchar(15) 
        

        但您的插入字符串如(在 vb.net 中):

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

        【讨论】:

          猜你喜欢
          • 2017-09-10
          • 1970-01-01
          • 2015-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多