Tôi có bảng OrderLines (OrderID int, LineIndex int,) và tham số có giá trị bảng của cùng một cấu trúc xác định các dòng đơn đặt hàng mới cho một đơn đặt hàng.TSQL - tuyên bố MERGE với khóa tổng hợp
Vì vậy, nếu tôi đã có OrderLines sau
1000 1 bread
1000 2 milk
1001 1 oil
1001 2 yogurt
1002 1 beef
1002 2 pork
và TVP sau
1001 1 yogurt
Tôi muốn nhận được OrderLines sau
1000 1 bread
1000 2 milk
1001 1 yogurt
1002 1 beef
1002 2 pork
Tức là chỉ chạm vào các hàng cho một Đơn đặt hàng.
Vì vậy, tôi đã viết truy vấn của tôi như thế này
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;
và nó sẽ xoá tất cả OrderLines khác (không được đề cập) cho đơn đặt hàng khác.
tôi đã cố gắng
WHEN NOT MATCHED BY SOURCE AND ([Target].[OrderID] = [Source].[OrderID]) THEN
nhưng có một lỗi cú pháp.
Tôi nên viết lại truy vấn của mình như thế nào?