sql >> Base de Datos >  >> RDS >> Sqlserver

Sql Server 2008 MERGE:la mejor manera de obtener recuentos

Puede especificar una cláusula OUTPUT en su declaración MERGE y obtener un informe de salida de lo que se ha hecho durante 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'
;

Esto le dará una fila para cada "acción" (insertar, actualizar, eliminar) para cada operación. Si se trata de muchas declaraciones, también puede SALIR EN @tableVar y luego mirar la variable de la tabla.

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

Consulte los Libros en línea para obtener detalles sobre MERGE y la cláusula OUTPUT .

Marc