2012-01-30 225 views
0

我试图插入大于5500字符的字符串值到MSSQL 2008数据库中。我得到错误nvarchar max给出'字符串或二进制数据将被截断'

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

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

编辑

当我手动输入通过MGMT工作室它的工作数据。但是,我正在通过JDBC驱动程序&执行更新。

我查询的形式为:

UPDATE table SET columnX = value1 WHERE columnX = value2; 
  • 我添加此语句批,每1000所陈述一次我执行它们。
  • 在这种情况下,value1包含大量的字符。
  • columnX绝对定义为nvarchar(最大)
+1

你的代码和表DDL是什么样的?你是否尝试过绝对最简单的测试用例? – 2012-01-30 15:50:04

+3

你确定它不是一个不同的列吗?这个错误[臭名昭着](https://connect.microsoft.com/SQLServer/feedback/details/339410/please-fix-the-string-or-binary-data-would-be-truncated-message-to-give专栏名称)提供的信息很少。 – vcsjones 2012-01-30 15:50:46

+3

发布您的查询,样本数据和表格结构,我们可以提供帮助。基本上现在你说“我不能这样做”,我们没有任何信息可以继续下去,所以对当前问题的回答是“不要这样做”,这同样是无益的。 – JNK 2012-01-30 15:52:26

回答

0

微软鼓励我们使用SQLServerPreparedStatement修改大额-类型,如VARCHAR(最大值)。 http://msdn.microsoft.com/en-us/library/ms378813.aspx

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

您可以在满足任务的sql服务器上编写存储过程。只需从Java代码中调用该存储过程即可。

我希望有帮助!

+0

感谢克里斯,我目前正在使用Java的PreparedStatement。这与SQLServerPreparedStatement有何不同? – Freek8 2012-01-31 12:18:15

+0

基本上有不同的JDBC-Stacks。一位来自微软。我真的不知道利弊。也许这部分回答你的问题:http://msdn.microsoft.com/en-us/data/aa937724.aspx – chris 2012-01-31 14:40:54

+0

我会尝试通过使用流,尝试这样做,谢谢克里斯 – Freek8 2012-01-31 14:48:14

相关问题