Bạn có thể chỉ định mệnh đề OUTPUT trên báo cáo MERGE và nhận báo cáo đầu ra về những gì đã được thực hiện trong quá trình MERGE.
MERGE (targetTable) AS t
USING (sourceTable) AS s
ON t.ID = s.ID
WHEN MATCHED THEN
(some statements)
WHEN NOT MATCHED THEN
(some statements)
OUTPUT
$action, inserted.ID 'inserted', deleted.ID 'deleted'
;
Điều này sẽ cho bạn một hàng cho mỗi "hành động" (chèn, cập nhật, xóa) cho mỗi thao tác. Nếu có nhiều câu lệnh, bạn cũng có thể OUTPUT INTO @tableVar và sau đó nhìn vào biến bảng.
DECLARE @tableVar TABLE (MergeAction VARCHAR(20), InsertedID INT, DeletedID INT)
MERGE (targetTable) AS t
USING (sourceTable) AS s
ON t.ID = s.ID
WHEN MATCHED THEN
(some statements)
WHEN NOT MATCHED THEN
(some statements)
OUTPUT
$action, inserted.ID 'inserted', deleted.ID 'deleted' INTO @tableVar
;
SELECT MergeAction, COUNT(*)
FROM @tableVar
GROUP BY MergeAction
Check-out Sách Online để biết chi tiết về các MERGE tuyên bố và OUTPUT clause.
Marc
Nguồn
2009-08-12 20:33:27
Có thể bằng cách nào đó để làm điều này trong một tuyên bố, có thể với một nhóm không? sao cho bit đầu ra sẽ là thứ gì đó dọc theo dòng> OUTPUT $ ACTION, COUNT (1) GROUP BY $ ACTION? – eidylon
Không, bạn không thể làm điều này. Bạn có thể hoặc chỉ là OUTPUT đến cửa sổ đầu ra SSMS, hoặc vào một biến bảng - không quá căng ra mệnh đề OUTPUT !! :-) –
Ah well ... Trên thực tế, OUTPUT có đưa ra một biến bảng hay một resultset không? Có thể bọc câu lệnh MERGE với mệnh đề OUTPUT bên trong câu lệnh SELECT làm nguồn (như truy vấn con) và sau đó có lệnh SELECT bên ngoài làm tổng hợp không? ... Nghe có thể. Tôi có thể phải chơi với điều đó. – eidylon