2 つの行を別々に挿入してみてください。少なくとも 1 つが失敗すると思いますが、必ずしも両方が失敗するとは限りません。個々の列に複合主キー/一意制約と別の一意制約の両方がない限り、エラーは挿入ステートメントでのみ見つかったデータから発生していません。
また、一緒に複合キーを形成する 2 つの主キーがあることを説明できますか? テーブルは主キーを 1 つだけ持つことができます。テーブル定義をスクリプト化して (SSMS のオブジェクト エクスプローラーで右クリックし、[テーブルをスクリプト化]、[作成先]、[クリップボード])、それを質問に追加して、用語に同意できるようにしてもらえますか?
P_ID に一意の制約があり、Sub_ID に一意の制約がある場合、意図したものとは対照的に、テーブルに各値を 1 つしか持つことができません (組み合わせのみが一意である必要があります)。個々の列に一意の制約がある場合、これは無効です。結合された制約には違反していませんが、最初の列の制約には違反しているためです。
P_ID Sub_ID
---- ------
0706 002
0706 003
これを修正する方法をお知らせします (そして、P_ID = '0706' および Sub_ID = '002' または '003' のいずれかの行がまだないことを確認します)。これを言うとどうなりますか:
SELECT COUNT(*) FROM dbo.tbl_AllParcel WHERE P_ID = '0706' AND Sub_ID = '002';
? またはもっと重要なことは、提供するスクリプトに応じて、次のようになると思います。
SELECT COUNT(*) FROM dbo.tbl_AllParcel WHERE P_ID = '0706';
SELECT COUNT(*) FROM dbo.tbl_AllParcel WHERE Sub_ID = '002';
個々の列にキーを追加せずに複合キーを作成するには、個々の列を選択しません。を使用してこれを行う方法は次のCREATE TABLE
とおりです。
CREATE TABLE dbo.tbl_AllParcel2
(
P_Id CHAR(4),
Sub_Id CHAR(3),
... other columns,
CONSTRAINT PK_Parcel PRIMARY KEY(P_Id, Sub_Id)
);
現在UIを使用していると思います。テーブル デザイナーでこれを実行しようとしないでください。ゴミの塊です。DDL を学んでください。Books OnlineのCREATE TABLE
およびALTER TABLE
トピックには、さまざまな制約やその他のテーブル属性を定義するための例がたくさんあります。
テーブルの作成 (MSDN)
テーブルの変更 (MSDN)