Java nvarchar max给出';字符串或二进制数据将被截断';

Java nvarchar max给出';字符串或二进制数据将被截断';,java,sql,string,sql-server-2008,nvarchar,Java,Sql,String,Sql Server 2008,Nvarchar,我试图将大于5500个字符的字符串值插入MSSQL 2008数据库。我得到了错误 字符串或二进制数据将被截断 当我尝试插入这些值时,即使列的数据类型声明为nvarchar(max)。我可以输入字符串大小的上限吗?如果是,这个问题的解决方案是什么 编辑 当我通过mgmt studio手动输入数据时,它可以工作。但是,我通过JDBC驱动程序和准备好的语句执行更新 我的查询形式如下: 更新表集columnX=value1,其中columnX=value2; 我将此语句添加到批处理中,每1000条语

我试图将大于5500个字符的字符串值插入MSSQL 2008数据库。我得到了错误

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

当我尝试插入这些值时,即使列的数据类型声明为nvarchar(max)。我可以输入字符串大小的上限吗?如果是,这个问题的解决方案是什么

编辑

当我通过mgmt studio手动输入数据时,它可以工作。但是,我通过JDBC驱动程序和准备好的语句执行更新

我的查询形式如下:

更新表集columnX=value1,其中columnX=value2;
  • 我将此语句添加到批处理中,每1000条语句执行一次
  • 本例中的值1包含大量字符
  • columnX明确定义为nvarchar(最大值)

Microsoft鼓励我们使用SQLServerPreparedStatement修改大值类型,如varchar(max)。

您还可以使用存储过程来解决问题,这就是我在JDBC/Pentaho遇到类似问题时所做的

您可以在sql server上编写一个存储过程来完成该任务。只需从Java代码中调用该存储过程


我希望这有帮助

您的代码和表DDL是什么样子的?您是否尝试过最简单的测试用例?您确定它不是另一列吗?这是因为提供的信息太少。请发布您的查询、示例数据和表结构,我们可以提供帮助。基本上现在你说的是“我不能这样做”,而我们没有任何信息可以继续,所以当前问题的答案是“不要那样做”,这同样没有帮助。另外,你在使用哪个JDBC驱动程序和JRE?MS-JDBC实现在最近的JRE上存在一些已知和可能仍然未知的问题。我不知道这是否与您的问题有关,但MS官方不支持这种组合。请参见:谢谢chris,我目前正在使用java的PreparedStatement。这与SQLServerPreparedStatement有何不同?基本上有不同的JDBC堆栈。一个来自微软。我真的不知道其利弊。也许这部分回答了你的问题: