1

次のエラーをスローしている 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 テーブルから特定のレコードを除外すると、うまくいきます! しかし、私はまだその記録の何が問題なのかわかりません。ここからどこへ行けばいいですか?注:そのレコードのみを含めると、更新も機能します。

4

1 に答える 1

3

私のコメントは答えであることが判明しました:

MERGEコードにステートメントがありません。MERGEを使用すると、エラーは本当にそれを呼び出しますUPDATEか? 信じがたい。また、UPDATEsそのメッセージはまったくありません。メッセージは明らかに aMERGEおよびaON句を参照しています。

問題はUPDATEありません。他の場所を見てください。

于 2013-04-12T17:21:06.943 に答える