Sql-Server

在 SQL Server Management Studio 設計器中更改表屬性時觸發器失去

  • August 3, 2017

我們在 SQL Server Management Studio 中發現了一個錯誤。當您更改需要刪除並重新創建表的任何表屬性時,所有觸發器都將消失。它必須在設計器內完成。設計人員需要禁用“防止保存需要重新創建的更改”選項。通常,每次發生此類更改時,都會使用新的屬性集複製、刪除和重新創建表。不幸的是,該過程會刪除您的觸發器。

我們檢查了我們擁有的每個版本的 SQL SMS,分別是:2008、2012、2014 和 2016。該錯誤僅在 2016 版本中修復。可能很重要的是,我們曾經擁有 Microsoft SQL Server 2000(32 位)數據庫並將其升級到 Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)。

由於我們的數據庫文件,我們發現了這個錯誤。我們看到表中沒有觸發器,我們的第一個想法是從一開始就沒有觸發器。快速瀏覽一下文件就足以看出我們錯了。我們在數據庫中重新創建流程。您可以觀看下面的影片:

https://www.youtube.com/watch?v=1VWrPBOC5rA

您是否在任何其他 SSMS 版本中遇到過它,如果是,那麼在哪個數據庫版本上遇到過?

你知道任何解決方法嗎?

無論如何,您不應該在 GUI 中進行這些更改,但在 T-SQL 中,這是您可以可靠地從 dev > test > prod 發布更改的唯一方法,也是您可以對數據庫結構進行原始碼控制的唯一方法。

話雖如此,當您更改需要重新創建表並且不是錯誤而是記錄行為的內容時,就會發生這種情況。

當您嘗試在 SQL Server 中保存表時,請參閱錯誤消息:“不允許保存更改”,其中明確指出(強調我的):

當啟用了阻止保存需要重新創建表的更改選項並且您對錶進行以下一項或多項更改時,會出現此問題:

  • 您更改列的 Allow Nulls 設置。
  • 您重新排序表中的列。
  • 您更改列數據類型。
  • 您添加一個新列。

當您更改表以便更改表的元資料結構,然後保存表時,必鬚根據這些更改重新創建表。**這可能會導致元數據失去,並在重新創建表期間直接失去數據。**如果您在 SQL Server Management Studio (SSMS) 選項視窗的設計器部分中啟用阻止保存需要重新創建表的更改選項,您會收到“症狀”部分中提到的錯誤消息。

那篇文章中的解決方法正是您應該做的:

若要解決此問題,請使用 Transact-SQL 語句對錶的元資料結構進行更改。

引用自:https://dba.stackexchange.com/questions/182594