0

PHP経由でクエリを送信するときに、複合キーを持つテーブルのUpsert機能を作成するにはどうすればよいですか?

キーが注文番号とアイテム番号の両方である order_items テーブルがあります。次に、注文要素の xml ドキュメントを返すストアへの API があります (これを解析して配列にします)。この文字列を取得して、既に存在するものを更新し、存在しないものを挿入したいと思います。数百の注文 (場合によっては数千の品目) が存在する可能性があるため、各品目ごとに品目が存在するかどうかを確認するクエリを実行したくありません。

Merge が答えかもしれないと思いましたが、私のデータはテーブルに存在しません (テーブルに書き込むのは配列です)。データの文字列を既存のテーブルとマージする方法はありますか? たとえば、次のようなものです。

$query = "IF a.order_id and a.item_id --already exist
update db.dbo.order_items
SET a.quantity = $qty, a.status = $status ....
ELSE
INSERT (order_id, item_id, quantity, status)
VALUES 
($order_id, $item_id, $qty, $status)";

run_query($query);

助けてくれてありがとう。

4

1 に答える 1

1

他の誰かがこのような問題に遭遇した場合、これが私のすべての要件を満たすソリューションです。

merge <table> WITH (HOLDLOCK) as target
USING (VALUES('00001111','385480486071',10, '10.00','3.00','0.00'))
AS source (order_id, item_code, item_quantity, item_price, shipping_price, discount)
ON target.order_id = source.order_id AND target.item_code = source.item_code
WHEN MATCHED THEN
update
SET
item_quantity = source.item_quantity, target.item_price = source.item_price, target.shipping_price = source.shipping_price, discount = source.discount
WHEN NOT MATCHED THEN
INSERT (order_id, item_code, item_quantity, item_price, shipping_price, discount)
values(source.order_id, source.item_code, source.item_quantity, source.item_price, source.shipping_price, source.discount);
于 2012-11-30T22:38:01.980 に答える