2011-02-01 9 views
2

VS 2010 Premium RTMRel(10.0.30319.1)およびSS2008を使用しています。私はAOKを構築し、いくつかのサンプルデータをロードするポストデプロイメントスクリプトを持つデータベースを持っています。私はVSのUIを介してこのDBを構築し、展開するとうまくいきます。 vsdbcmdを使用して展開しようとすると、次のようなエラーが発生してデータ集計に失敗します。プライマリキー制約違反、vsdbcmd経由でDBを展開する場合のみ

** * SQL01268 C:\ source \ mydatabase.sql(5197,0).Net SqlClientデータプロバイダ:Msg 2627 、レベル14、状態1、行227 PRIMARY KEY制約 'pk_customers'の違反。オブジェクト 'dbo.customers'に重複キーを挿入できません。デモの目的のために* *

、私は顧客テーブルに特定のレコードを移入しようとしていますし、私が選んだの値を設定するには、id列のIDENTITYプロパティをオーバーライドしています。私の展開後のスクリプト内の関連する行がこれらです:私はUI経由ではなく、コマンドラインを介して(SET IDENTITY INSERT ONを使用して)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 

誰でも知っていますか?

いいえ、id = 10001のcustomersテーブルにはすでにレコードが存在する可能性はありません。テーブルには他のレコード(または挿入)はまったくありません。

私は、エラーメッセージの「オブジェクト内の重複キー」の部分はまったく間違っていると思うし、自分自身の値をPK列に入れようとしているとは反対しています。

PK制約には標準のデフォルト値があります。デフォルトを変更してIGNORE_DUP_KEY = ONに設定すると、コマンドラインdeployが動作します。しかし、私はそれをする必要はありません。

洞察力や提案が高く評価されました。

答えて

1

OK、恥ずかしがり屋。

私の配備後スクリプトには、デフォルトのDB名(MobileDB)を指定しているUSE文があることが判明しました。私はUIを使ってビルドしていましたが、このMobileDBの名前も使用していました。デプロイメントの設定は常にデータベースを再作成していました。

しかし、vsdbcmdからデプロイしたときに、ランダムなDB名(ChickenSoupなど)を使用していました。そのため、データ投入スクリプトが実行されたとき、MobileDBに書き戻そうとしていましたが、既にそこにあったデータを突き止め、PK制約に違反して失敗しました。

クラシックユーザーエラーです。

関連する問題