次のエラーをスローしている JOIN を含む UPDATE クエリがあります。
MERGE ステートメントが同じ行を複数回 UPDATE または DELETE しようとしました。これは、ターゲット行が複数のソース行と一致する場合に発生します。MERGE ステートメントは、ターゲット テーブルの同じ行を複数回 UPDATE/DELETE することはできません。ターゲット行が多くても 1 つのソース行と一致するように ON 句を調整するか、GROUP BY 句を使用してソース行をグループ化します。
これが私の更新ステートメントです:
UPDATE
Products
SET
price = pu.ColumnValue
FROM
Products p
JOIN #priceupdates pu ON p.sku = pu.sku AND p.idManufacturer = pu.idManufacturer
製品は、SKU および idManufacturer による #priceupdates に参加します。
#priceupdates テーブルに重複や NULL はありません。
編集:
それを証明するために、次の 2 つのステートメントを実行しましたが、どちらも同じ量のレコードを返しました。
select sku, idmanufacturer from #priceupdates
select distinct sku, idmanufacturer from #priceupdates
編集を終了
#priceupdates のデータに応じて、エラーがスローされる場合とスローされない場合がありますが、どのデータが問題の原因であるかを見つけるのに苦労しています。
では、重複があること以外に、このエラーを引き起こす可能性のある他の要因は何ですか?
どんな助けでも大歓迎です。
編集2:
テストデータはこちら。私が言ったように、どのデータが問題を引き起こしているのかを見つけることができないため、再現を提供することはできません。
CREATE TABLE #Products (idProduct INT, SKU VARCHAR(50), idManufacturer INT, Price FLOAT)
INSERT INTO #Products
SELECT '316992', '00015', '123', '0.52'
UNION SELECT '316993', '00037', '123', '0.52'
UNION SELECT '316994', '00039', '123', '0.52'
UNION SELECT '316995', '00115', '123', '0.52'
UNION SELECT '316996', '00137', '123', '0.52'
CREATE TABLE #PriceUpdates (ProductUpdateID INT, SKU VARCHAR(50), idManufacturer INT, ColumnName VARCHAR(50), ColumnValue VARCHAR(50), idUser INT, BatchID INT)
INSERT INTO #PriceUpdates
SELECT '1837', '00015', '123', 'Price', '0.99', '13', '1929'
UNION SELECT '1838', '00037', '123', 'Price', '0.99', '13', '1929'
UNION SELECT '1839', '00039', '123', 'Price', '0.99', '13', '1929'
UNION SELECT '1840', '00115', '123', 'Price', '0.99', '13', '1929'
UNION SELECT '1841', '00137', '123', 'Price', '0.99', '13', '1929'
UPDATE
p
SET
price = pu.ColumnValue
FROM
#Products p
JOIN #priceupdates pu ON p.sku = pu.sku AND p.idManufacturer = pu.idManufacturer
DROP TABLE #Products
DROP TABLE #PriceUpdates
アップデート!
犯人を見つけたと思います。priceupdates テーブルから特定のレコードを除外すると、うまくいきます! しかし、私はまだその記録の何が問題なのかわかりません。ここからどこへ行けばいいですか?注:そのレコードのみを含めると、更新も機能します。