[解決済み】PRIMARY KEY制約に違反しました。オブジェクトに重複したキーを挿入できない
2022-02-20 16:57:51
質問内容
プロジェクトを継承したのですが、SQLエラーが発生し、修正する方法がわかりません。
eCommerce サイトで、コードは注文の配送情報を別のデータベース・テーブルに挿入しています。
以下は、テーブルに情報を挿入しているコードです。
string sql = "INSERT INTO AC_Shipping_Addresses
(pk_OrderID, FullName, Company, Address1, Address2, City, Province, PostalCode, CountryCode, Phone, Email, ShipMethod, Charge_Freight, Charge_Subtotal)
VALUES (" + _Order.OrderNumber;
sql += ", '" + _Order.Shipments[0].ShipToFullName.Replace("'", "''") + "'";
if (_Order.Shipments[0].ShipToCompany == "")
{
sql += ", '" + _Order.Shipments[0].ShipToFullName.Replace("'", "''") + "'";
}
else
{
sql += ", '" + _Order.Shipments[0].ShipToCompany.Replace("'", "''") + "'";
}
sql += ", '" + _Order.Shipments[0].Address.Address1.Replace("'", "''") + "'";
sql += ", '" + _Order.Shipments[0].Address.Address2.Replace("'", "''") + "'";
sql += ", '" + _Order.Shipments[0].Address.City.Replace("'", "''") + "'";
sql += ", '" + _Order.Shipments[0].Address.Province.Replace("'", "''") + "'";
sql += ", '" + _Order.Shipments[0].Address.PostalCode.Replace("'", "''") + "'";
sql += ", '" + _Order.Shipments[0].Address.Country.Name.Replace("'", "''") + "'";
sql += ", '" + _Order.Shipments[0].Address.Phone.Replace("'", "''") + "'";
if (_Order.Shipments[0].ShipToEmail == "")
{
sql += ",'" + _Order.BillToEmail.Replace("'", "''") + "'";
}
else
{
sql += ",'" + _Order.Shipments[0].ShipToEmail.Replace("'", "''") + "'";
}
sql += ", '" + _Order.Shipments[0].ShipMethod.Name.Replace("'", "''") + "'";
sql += ", " + shippingAmount;
sql += ", " + _Order.ProductSubtotal.ToString() + ")";
bll.dbUpdate(sql);
正常に動作していますが、以下のようなSQLエラーも出力されます。
PRIMARY KEY 制約 'PK_AC_Shipping_Addresses' に違反しました。挿入できません。 オブジェクト 'dbo.AC_Shipping_Addresses' に重複したキーがあります。重複するキーの値 は (165863) です。
似たような質問を読むと、ステートメントでIDを宣言したほうがいいようです。
これは正しいのでしょうか?この問題を解決するには、どのようにコードを調整すればよいでしょうか?
解決方法は?
pk_OrderID は AC_Shipping_Addresses の PK であることは確かです。
そして、あなたは_Order.OrderNumberを介して重複を挿入しようとしています。
を行う。
select * from AC_Shipping_Addresses where pk_OrderID = 165863;
または select count(*) ....
確実に1行が返されます。
これは、pk_OrderID = 165863 をすでに使用しており、その値を持つ別の行を持つことができないことを意味しています。
行がある場合は挿入しないようにしたい場合
insert into table (pk, value)
select 11 as pk, 'val' as value
where not exists (select 1 from table where pk = 11)
関連
-
[解決済み] FOREIGN KEY制約で参照されているため、テーブルを切り捨てることができないのですか?
-
[解決済み] TEXTIMAGE_ON [PRIMARY]とは何ですか?
-
[解決済み] sql文の角括弧[]の使い方を教えてください。
-
[解決済み] SQL Server データベース復元エラー: 指定されたキャストは無効です。(SqlManagerUI)
-
[解決済み] 結果を分割するためのSQLの小数点以下の値
-
[解決済み] 変数に値を代入するSELECT文は、データ検索操作と組み合わせてはいけません。
-
[解決済み] SQL Server の .sql ファイルとは何ですか?
-
[解決済み] SQL ServerにおけるXOR
-
[解決済み] Sqliteの複数カラムの主キー
-
[解決済み] postgres の主キー配列が同期しなくなったときにリセットする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 式をデータ型datetimeに変換する際に算術オーバーフローエラーが発生する。(日付と時刻の表示中に...)
-
[解決済み] 更新時のSqlエラー : UPDATE ステートメントが FOREIGN KEY 制約と競合しています。
-
[解決済み] SQL Server xp_delete_file パラメータ
-
[解決済み] 各GROUP BY式は、外部参照でない列を少なくとも1つ含む必要があります。
-
[解決済み] SQL Server の更新コマンドでエラー - "現在のコマンドで深刻なエラーが発生しました".
-
[解決済み] SQL Agent を使用して SSIS パッケージを実行する際の問題 - "DTSER_FAILURE(1)" で失敗します。
-
[解決済み] テーブルが存在しない場合、"Table 'dbo.Foo' already exists." というエラーはどのように解決すればよいですか?
-
[解決済み] UPDATEエラーです。"REPLACEの引数1の引数データ型textは無効です"
-
[解決済み] スカラー変数を宣言する必要があります。
-
[解決済み] データベース内の全テーブルのサイズを取得する