2
insert into A (id,Name)
select ti.id,ti .Name 
from A ti 
where ti.id >= 1 AND ti.id<=3

id主キーですが、自動生成されません。クエリを実行すると、エラーが発生します

PRIMARY KEY 制約「XPKA」に違反しています。オブジェクト 'dbo.A' に重複キーを挿入できません

表A

id Name
1   A
2   B
3   C

そして挿入したい

id Name
4   A
5   B
6   C
4

4 に答える 4

4

すべての行は、主キー列に対して異なる値を持つ必要があります。レコードAをそれ自体に挿入しているため、既に使用されている主キー値を使用して新しい行を作成しようとしています。これにより、表示されるエラー メッセージが表示されます。

この方法でレコードを挿入する必要がある場合は、PK 列に一意の値を含めるための戦略を含める必要があります。ルールを使用できない場合autoincrement(通常の方法)、ロジックでこの要件を適用する必要があります。そうしないと、このようなエラーが引き続き表示されます。

于 2013-02-25T14:26:08.670 に答える
3

テーブルから選択しAて、そこにまっすぐ挿入しています。これは、挿入した ID 値が確実に存在することを意味します。

このメッセージは、ID col に PrimaryKey があり、列の値が一意である必要があることを示しています。このため、アクションを実行できません。

指定された要件に基づいてクエリを修正するには、スクリプトを次のように変更します。

insert into A (id,Name)
select ti.id + 3,ti .Name 
from A ti 
where ti.id >= 1 AND ti.id<=3
于 2013-02-25T14:27:53.537 に答える
1

挿入する行の ID を調整する必要があります。あなたの例では、キー4、5、6を生成します:

insert into A (id,Name)
select ti.id + 3 as NewKey,ti.Name 
from A ti 
where ti.id >= 1 AND ti.id<=3

しかし実際には、新しいキーを可能な限り古いキーから分離する値を選択する必要があります。

insert into A (id,Name)
select ti.id + 100000 as NewKey,ti.Name 
from A ti 
where ti.id >= 1 AND ti.id<=3
于 2013-02-25T15:43:58.787 に答える
0

ヤーコフ・エリスが言ったように...

すべての行は、主キー列に対して異なる値を持つ必要があります。

そして、あなたの行を合計で3つに制限するWHERE句があるので、

固有 ID の 1、2、3 を持つもの

したがって、それらを置き換えたい場合は、既に存在する場所に挿入してエラーを生成しようとします。

代わりにそれらを更新できますか?そして、それはあなたの問題を解決します。

アップデート

余分なコードを追加した後... UNIQUE Key IdentifierをABCフィールド名ではなくID番号に設定する必要があります(名前は何でも)

于 2013-02-25T14:28:51.310 に答える