新しいSSDTデータベースを作成する代わりに、ターゲットデータベースの既存のテーブル(以前はSSDTを介して作成されたもの)に列を追加することを含むSSDTを使用したデータベースの変更の公開。テーブル作成スクリプトまたはテーブル変更スクリプトを通じて列を追加しようとすると、同じエラーが発生しました。 Schema Compareを試しても、同じエラーが発生したターゲットデータベースのテーブルはまだ残っています。 SSDTパブリッシングを通じてターゲットデータベースオブジェクトへの変更を変更する方法
RAISERROR(N '行が検出されました。データ損失が発生する可能性があるため、スキーマの更新を終了しています。'、16、127)WITH NOWAIT;
私はチェックしてみました
データ損失が発生する可能性がある場合は、増分展開をブロックします。
レプリケートされたオブジェクトを変更しないでください。
変更データキャプチャオブジェクトは変更しないでください。
これは、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
);
これはテーブルを再構築しないので、潜在的なデータ損失を引き起こしません。