w3schools usar top matched ejemplos ejemplo delete como sql-server sql-server-2008 merge rowcount

usar - Sql Server 2008 MERGE-la mejor manera de obtener cuentas



select top sql server ejemplos (3)

Para extraer vars individuales, puede publicar la respuesta del proceso por marc_s usando pivot:

declare @mergeResultsTable table (MergeAction VARCHAR(20)); declare @insertCount int, @updateCount int, @deleteCount int; merge ... output $action into @mergeResultsTable; select @insertCount = [INSERT], @updateCount = [UPDATE], @deleteCount = [DELETE] from (select ''NOOP'' MergeAction -- row for null merge into null union all select * from @mergeResultsTable) mergeResultsPlusEmptyRow pivot (count(MergeAction) for MergeAction in ([INSERT],[UPDATE],[DELETE])) as mergeResultsPivot;

La fila union ''noop'' se puede eliminar si init vars to 0 o sabe que la tabla de origen o destino tiene> 0 filas.

Me pregunto qué recomendaría usted como la mejor manera de obtener los recuentos de acciones de una instrucción MERGE en el servidor Sql.

Entonces, es decir, ejecuto un MERGE que realiza algunas inserciones, algunas actualizaciones y algunas eliminaciones, ... Me gustaría poder averiguar CÓMO MUCHAS inserciones, CÓMO MUCHAS actualizaciones y Cuántas eliminaciones.

¿Cuál sería la mejor manera de hacer esto?


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 hay muchas declaraciones, también podría SALTAR 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 la declaración MERGE y la cláusula OUTPUT .

Bagazo


Qué tal si:

INSERT YourResultsTable (action, cnt) SELECT action, count(*) FROM ( 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 as action, inserted.ID as ins, deleted.ID as del ) m GROUP BY action;

[Editar] Ok, entonces prueba:

INSERT YourResultsTable (action) SELECT action FROM ( 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 as action, inserted.ID as ins, deleted.ID as del ) m;

(y luego contar los resultados)

Robar