Sql-Server
使用 SSDT 發布數據庫更改,包括通過 Project 將現有表的列添加到目標數據庫
使用 SSDT 發布數據庫更改,包括將列添加到目標數據庫中的現有表(之前通過 SSDT 創建)。而不是創建新的 SSDT 數據庫。嘗試通過表創建腳本或通過更改表腳本添加列。我遇到了同樣的錯誤。即使通過Schema Compare嘗試過,目標數據庫中的表仍然遇到同樣的錯誤。如何通過 SSDT 發布更改對目標數據庫對象的更改?
RAISERROR(檢測到 N’行。模式更新正在終止,因為可能會發生數據失去。’,16、127) WITH NOWAIT;
我嘗試通過檢查
- 如果可能發生數據失去,請阻止增量部署。
- 不要 ALTER 複製的對象。
- 不要更改更改數據擷取對象。
發生這種情況是因為您在
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 );
這不會重建表,因此不會導致潛在的數據失去。