Sql-Server

使用 SSDT 發布數據庫更改,包括通過 Project 將現有表的列添加到目標數據庫

  • April 24, 2019

使用 SSDT 發布數據庫更改,包括將列添加到目標數據庫中的現有表(之前通過 SSDT 創建)。而不是創建新的 SSDT 數據庫。嘗試通過表創建腳本或通過更改表腳本添加列。我遇到了同樣的錯誤。即使通過Schema Compare嘗試過,目標數據庫中的表仍然遇到同樣的錯誤。如何通過 SSDT 發布更改對目標數據庫對象的更改?

RAISERROR(檢測到 N’行。模式更新正在終止,因為可能會發生數據失去。’,16、127) WITH NOWAIT;

我嘗試通過檢查

  1. 如果可能發生數據失去,請阻止增量部署。
  2. 不要 ALTER 複製的對象。
  3. 不要更改更改數據擷取對象。

發生這種情況是因為您在CREATE TABLE腳本中間添加了列。這會導致發生“表重建”。幾個月前我在部落格上討論過這個問題:SSDT 問題:表重建

列序數部分是您遇到的具體問題。假設你有一張這樣的桌子:

CREATE TABLE [dbo].[Post]
(
   [Id] INT IDENTITY(1,1) NOT NULL,
   [PostType] VARCHAR(10) NOT NULL
);

然後在列列表中間添加一列:

CREATE TABLE [dbo].[Post]
(
   [Id] INT IDENTITY(1,1) NOT NULL,
   [CommentCount] INT NULL, -- NEW COLUMN IN THE MIDDLE
   [PostType] VARCHAR(10) NOT NULL
);

這將“重建”整個表,以使基礎表元數據在模型(您的 SSDT 項目)和目標數據庫之間保持同步。

解決方案?只需將列添加到末尾:

CREATE TABLE [dbo].[Post]
(
   [Id] INT IDENTITY(1,1) NOT NULL,
   [PostType] VARCHAR(10) NOT NULL
   [CommentCount] INT NULL -- NEW COLUMN AT THE END
);

這不會重建表,因此不會導致潛在的數據失去。

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