2012-01-30 226 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

相關問題