2011年10月4日

開發人應該學的,用Visual Studio開發SQL - 錯誤訊息 - "偵測到資料列。結構描述更新即將終止,因為可能造成資料遺失。"

這個案例是這樣的,本機的結構上,Customers裡面沒有Fax2,但是正式DB上有Fax2,而想利用Visual Studio更新此Table時產生的錯誤;以下是差異比較的圖,我們要將正式DB的Fax2刪除。

image

但是按下更新目標的時候,卻產生以下錯誤:

SQL72014: .Net SqlClient Data Provider: 訊息 50000,層級 16,狀態 127,行 6 偵測到資料列。結構描述更新即將終止,因為可能造成資料遺失。

image

如字面上所敘述,簡單的講,就是正式DB的這個Table已經有資料了,所以不給我們刪除這個欄位,其實這也是不錯的防呆機制。

原本以為有地方可以設定略過這種機制,但似乎沒有 ( 如果未來有找到,再補上 ),所以我們用另外一種方式來處理,也就是產生指令碼的方式。image

我們可以發現Script的部分有這一行,其實就是這一行會檢查是否有無資料,我們只要把這行刪除,或是註解掉。

/*
正在卸除資料行 [dbo].[Customers].[Fax2],因此可能導致資料遺失。
*/

IF EXISTS (select top 1 1 from [dbo].[Customers])
    RAISERROR ('偵測到資料列。結構描述更新即將終止,因為可能造成資料遺失。', 16, 127) WITH NOWAIT

然後執行這段Script ( 按下綠色箭頭或是執行查詢都可以 ),就可以順利刪除了。

2 則留言:

  1. 請問一下你使用的比對工具是哪一套?

    回覆刪除
  2. Demo大大,我是使用SQL Server Developer Tools,Codename“Juneau”CTP3 給您參考。

    回覆刪除