テーブルOrderLines(OrderID int、LineIndex int、)と、1つのオーダーの新しいオーダーラインを定義する同じ構造のテーブル値パラメーターがあります。
だから私が次のOrderLinesを持っていたら
1000 1 bread
1000 2 milk
1001 1 oil
1001 2 yogurt
1002 1 beef
1002 2 pork
および次のTVP
1001 1 yogurt
次のOrderLinesを取得したい
1000 1 bread
1000 2 milk
1001 1 yogurt
1002 1 beef
1002 2 pork
つまり、1つの注文に対してのみ行をタッチします。
だから私はこのように私のクエリを書きました
MERGE
[OrderLines] AS [Target]
USING
(
SELECT
[OrderID], [LineIndex], [Data]
FROM
@OrderLines
)
AS [Source] ([OrderID], [LineIndex], [Data])
ON ([Target].[OrderID] = [Source].[OrderID]) AND ([Target].[LineIndex] = [Source].[LineIndex])
WHEN MATCHED THEN
UPDATE
SET
[Target].[Data] = [Source].[Data]
WHEN NOT MATCHED BY TARGET THEN
INSERT
([OrderID], [LineIndex], [Data])
VALUES
([Source].[OrderID], [Source].[LineIndex], [Source].[Data])
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
そして、他の注文の他のすべての(言及されていない)OrderLinesを削除します。
私は試した
WHEN NOT MATCHED BY SOURCE AND ([Target].[OrderID] = [Source].[OrderID]) THEN
しかし、構文エラーが発生しました。
クエリをどのように書き直す必要がありますか?