Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Sql Server 2008 MERGE - най-добрият начин за получаване на бройки

Можете да укажете клауза OUTPUT във вашия оператор MERGE и да получите изходен отчет за това, което е направено по време на 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'
;

Това ще ви даде ред за всяко „действие“ (вмъкване, актуализиране, изтриване) за всяка операция. Ако има много изрази, можете също да ИЗВЕДЕТЕ В @tableVar и след това да погледнете променливата на таблицата.

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

Разгледайте онлайн книгите за подробности относно ОБЛИВАНЕ оператор и клауза OUTPUT .

Марк



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да премахнете частта от времето на стойност за дата и час (SQL Server)?

  2. Генерирайте произволно число, което не е там в таблица в sql сървър

  3. Копиране на редове в база данни, когато редовете имат деца

  4. Съвети за използване на SQL Server със Salesforce

  5. Как да прехвърлите varchar към XML в заявка OUTER APPLY