sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2008 MERGE – nejlepší způsob, jak získat počty

V příkazu MERGE můžete zadat klauzuli OUTPUT a získat výstupní zprávu o tom, co bylo provedeno během 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'
;

Tím získáte řádek pro každou "akci" (vložení, aktualizaci, odstranění) pro každou operaci. Pokud je to mnoho příkazů, můžete také OUTPUT INTO @tableVar a pak se podívat na proměnnou tabulky.

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

Podívejte se na Books Online, kde najdete podrobnosti o MERGE prohlášení a klauzule OUTPUT .

Marc



  1. Nesprávné uvozovky při použití crosstab() v PostgreSQL

  2. DatabaseError:„ne všechny argumenty převedeny během formátování řetězce“, když používám pandas.io.sql.to_sql()

  3. Je COUNT rychlejší než stahování záznamů a počítání v kódu?

  4. mysql odstranit v nouzovém režimu