TSQL -Оператор MERGE с составным ключом

У меня есть таблица OrderLines (OrderID int, LineIndex int, )и табличный параметр той же структуры, определяющий новые строки заказа для одного заказа.

Итак, если бы у меня были следующие 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

т.е. сенсорные строки только для одного заказа.

Поэтому я написал свой запрос следующим образом

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;

и он удаляет все другие (не упомянутые )строки заказов для других заказов.

Я пытался

WHEN NOT MATCHED BY SOURCE AND ([Target].[OrderID] = [Source].[OrderID]) THEN

но получил синтаксическую ошибку.

Как мне переписать мой запрос?

9
задан Marcel N. 4 July 2012 в 17:45
поделиться