【问题标题】:How can I store more than 4000 chars in an SQL Server parameter?如何在 SQL Server 参数中存储超过 4000 个字符?
【发布时间】:2012-05-13 09:00:51
【问题描述】:

我正在尝试将大于 4000 个字符的 XML 传递给存储过程。我尝试使用NTEXTNVARCHAR(MAX)VARCHAR(MAX)VARCHAR(8000)XML 作为参数类型,但我总是收到错误:

System.Data.SqlClient.SqlException:字符串或二进制数据将被截断。该语句已终止。

该值没有被存储到表中,它只是一个变量,从中选择了数据然后存储到表中。

ASP.NET 不能发送超过 4000 个字符作为参数吗?或者 SQL Server 中是否有我可以关闭的设置?

谢谢,

托马斯

编辑:

这适用于NTEXT。我查看了错误详细信息,发现 SQL 的哪一行导致了错误,结果发现有一个完全不相关的列设置为 VARCHAR(50),应该是 VARCHAR(MAX) - 我假设它来自 10000 个字符 @ 987654330@ 但完全不相关。我很抱歉。

【问题讨论】:

  • 你试图在数据库中写入的那一列的长度是多少?
  • 如果您将值作为参数传递,您是否记得增加了参数的宽度以及数据类型?那个经常咬我...
  • 向我们展示代码,以便我们指出错误,而不是猜测。发生截断是因为您的代码截断了它。
  • 您不应该再使用NTEXT - 它已被弃用,很快就会从 SQL Server 中删除。改用NVARCHAR(MAX) - 它具有所有相同的有益特性,甚至可以像“普通”NVARCHAR(x) 字符串一样对待 - 对它使用所有字符串函数(处理NTEXT 总是很笨拙)
  • 考虑删除问题!

标签: asp.net sql-server xml sql-server-2005


【解决方案1】:

将 XML 分解成更小的块并将它们分配给单独的变量,然后将它们连接起来

声明@SQL1,@SQL2

SET @SQL1=chunk1

SET @SQL2=chunk2

SET @SQLn=chunkn

执行(@SQL1+@SQL2.....+@SQLn)

【讨论】:

    【解决方案2】:

    这是所有版本的 sql server 限制。您可以将 xml 拆分为两个 varchar 变量并将它们合并到存储过程中。这是解决此问题的方法。

    【讨论】:

      【解决方案3】:

      似乎有几种方法可以做到这一点。 This 是我最近的做法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-22
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多