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

Обединете данни в две целеви таблици

Теоретично би трябвало да има решение това да се направи в едно изявление, но досега не успях да го намеря. *

Ето как може да се направи с две MERGE изявления:

WITH CTE_trgt AS 
(
    SELECT c.compid, c.ownerid, t.projid, t.active 
    FROM component c
    INNER JOIN trace t ON c.compid = t.compid
)
MERGE CTE_trgt t
USING Donor s
ON t.projid = s.projid
WHEN NOT MATCHED BY TARGET
    THEN INSERT (ownerid)
    VALUES (s.ownerid)
OUTPUT
    INSERTED.compid, s.projid, 1 INTO trace;


MERGE trace t
USING Donor s
ON t.projid = s.projid
WHEN NOT MATCHED BY SOURCE 
    THEN UPDATE SET t.active = 0;

ДЕМО SQLFiddle

*Част с актуализиращата се активна колона:

WHEN NOT MATCHED BY SOURCE 
    THEN UPDATE SET t.active = 0

трябва да може да се побере в горната заявка, създавайки единична инструкция за сливане за всички операции, но извежда грешка:

дори ако очевидно е една колона и обикновената актуализация без сливане работи добре . Може би някой знае причина и/или решение за това.




  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, част 3:Основи на регистрирането

  2. Каква е ефективността на клаузата Merge в sql server 2008?

  3. Как да напиша UTF-8 знаци с помощта на групово вмъкване в SQL Server?

  4. Използвайте TYPEPROPERTY() за връщане на информация за тип данни в SQL Server

  5. Намерете име на таблица във всички обекти на всички бази данни