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

Използване на сливане в SQL Server за актуализиране на трета таблица

Имате нужда от временно хранилище на изход от оператора за сливане и оператора за актуализиране, които използват временната таблица / променливата на таблицата.

-- Your table A, B and C
declare @A table(ID int, Col int)
declare @B table(ID int, Col int)
declare @C table(ID int, Col int)

-- Sample data
insert into @A values (1, 1),(2, 2)
insert into @B values (1, 0)
insert into @C values (1, 0),(2, 0)

-- Table var to store ouput from merge
declare @T table(ID int, Col int, Act varchar(10))

-- Merge A -> B
merge @B as B
using @A as A
on A.ID = B.ID
when not matched then insert (ID, Col) values(A.ID, A.Col)
when matched then update set Col = A.Col
output inserted.ID, inserted.Col, $action into @T;

-- Update C with rows that where updated by merge    
update C set
  Col = T.Col
from @C as C
  inner join @T as T
    on C.ID = T.ID and
       T.Act = 'UPDATE'

https://data.stackexchange.com/stackoverflow/qt/119724/



  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 заявка може да има две клаузи from?

  2. По-бързо запитване за едно двоично (1) поле или 8 битови полета?

  3. Как да създадете csv изходен файл от съхранена процедура в SQL Server

  4. Тъй като няма параметър за масив на Sqlserver, какъв е най-добрият начин да продължите?

  5. Драйвер за sqlsrv 4.0 не се показва на phpinfo()