Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Sql Server 2008 MERGE - der beste Weg, um Zählungen zu erhalten

Sie könnten eine OUTPUT-Klausel in Ihrer MERGE-Anweisung angeben und einen Ausgabebericht darüber erhalten, was während MERGE getan wurde.

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'
;

Dadurch erhalten Sie für jede Operation eine Zeile für jede "Aktion" (Einfügen, Aktualisieren, Löschen). Wenn es viele Anweisungen sind, könnten Sie auch OUTPUT INTO @tableVar ausgeben und sich dann die Tabellenvariable ansehen.

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

Weitere Informationen zu MERGE finden Sie in der Onlinedokumentation -Anweisung und die OUTPUT-Klausel .

Markus