The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

資料庫專案無法寫入目標資料庫時的解法 (調整欄位大小時)

Visual Studio 2010 Premium 企業版 資料庫專案 功能在進行 結構描述比較 (Schema Compare) 時,當你的來源資料庫特定表格某個欄位的欄位大小變更時(變小)可能會引發「無法成功更新目標結構描述。如需詳細資訊,請參閱 [錯誤清單] 視窗。」的錯誤(The target schema could not be updated successfully. For more information, see the Error List window.),此時就必須用今天的方法來解決。

當我們要進行 寫入更新 (Write Updates) 動作的畫面如下:

然後當要變更目標資料的欄位大小時,其錯誤畫面如下:

當我們看 [錯誤清單] 視窗的內容可以得知詳細的錯誤訊息:

SQL01268: .Net SqlClient Data Provider: Msg 8152, Level 16, State 13, Line 1 String or binary data would be truncated. ( 字串或二進位資料會被截斷。 )

由於 字串或二進位資料會被截斷 (String or binary data would be truncated.) 這樣的錯誤訊息在 SQL Server 中十分常見,意思是說當你在執行 INSERT INTO 準備插入一筆資料到資料表之中時,由於插入的資料裡,其中有個欄位的資料長度大於表格中該欄位所定義的長度,因此才會引發 字串或二進位資料會被截斷 這個錯誤,所以才會在執行 寫入更新 (Write Updates) 時發生失敗。

解決的方法如下:

新增結構描述比較 (New Schema Comparison) 時修改 選項 (Options) 設定

接著將如下圖的 SET ANSI_WARNINGS 選項 取消選取

取消了這個選項後,這次在執行一次 寫入更新 (Write Updates) 動作就可以成功寫入目標資料庫了!

注意:由於表格的欄位長度變小,所以當 寫入更新 (Write Updates) 成功後原本在資料庫中的該欄位資料可能會被截斷,這部分的資料遺失風險各位要評估後再執行。

相關連結