테이블 OrderLines (OrderID int, LineIndex int) 및 동일한 order order에 대한 새로운 주문 라인을 정의하는 동일한 구조의 테이블 반환 매개 변수가 있습니다.복합 키가있는 TSQL - MERGE 문
그래서 나는 다음과 같은 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;
처럼 내 쿼리를 작성하고 다른 주문에 대한 다른 모든 (언급되지 않은) OrderLines을 삭제합니다.
나는WHEN NOT MATCHED BY SOURCE AND ([Target].[OrderID] = [Source].[OrderID]) THEN
을 시도하지만 구문 오류가 발생했습니다.
검색어를 어떻게 다시 작성해야합니까?