VS 2010 Premium RTMRel (10.0.30319.1) と SS2008 を使用しています。AOK を構築するデータベースがあり、いくつかのサンプル データをロードする配置後スクリプトがあります。VS UI を介してこの DB をビルドしてデプロイすると、問題なく動作します。vsdbcmd を使用して展開しようとすると、次のようなエラーでデータの作成に失敗します。
** * SQL01268 C:\source\mydatabase.sql (5197,0) .Net SqlClient データ プロバイダー: メッセージ 2627、レベル 14、状態 1、行 227 PRIMARY KEY 制約 'pk_customers' の違反。オブジェクト 'dbo.customers' に重複するキーを挿入できません。* *
デモ目的で、特定のレコードを顧客テーブルに入力しようとしており、id 列の IDENTITY プロパティをオーバーライドして、選択した値を設定しています。デプロイ後のスクリプトの関連する行は次のとおりです。
SET IDENTITY_INSERT [dbo].[customers] ON
INSERT INTO [dbo].[customers] ([id], [name], [notes]) VALUES ( 10001, N'ABC Co', NULL )
SET IDENTITY_INSERT [dbo].[customers] OFF
コマンドラインではなく、UI を介して (SET IDENTITY INSERT ON を使用して) IDENTITY 列をオーバーライドできる理由を知っている人はいますか?
いいえ、顧客テーブルに id = 10001 のレコードが既に存在する可能性はありません。テーブルには他のレコード (または挿入) はまったくありません。
エラーメッセージの「オブジェクトの重複キー」の部分は完全に間違っており、PK列に自分の値を入れようとしていることに反対していると思います。
PK 制約には標準のデフォルトがあります。デフォルトを変更して IGNORE_DUP_KEY = ON に設定すると、コマンド ライン デプロイが機能します。しかし、私はそれをする必要はありません。
洞察や提案をいただければ幸いです。