Mam dwie identyczne tabele SQL Server (SOURCE
i DESTINATION
) z wieloma kolumnami w każdej z nich. Chcę wstawić do tabeli DESTINATION
wiersze z tabeli SOURCE
, które nie istnieją jeszcze w tabeli DESTINATION
. Definiuję równość między dwoma wierszami, jeśli wszystkie kolumny są zgodne, poza znacznikiem czasu, kolumną zliczania i całkowitym kluczem podstawowym. Dlatego chcę wstawić do DESTINATION
wszystkie wiersze w SOURCE
, które już nie istnieją w DESTINATION
ignorowaniu liczby, znacznika czasu i kolumn klucza podstawowego.scalanie zawartości dwóch tabel bez powielania treści
Jak to zrobić?
Dzięki za wszystkie uwagi! Wybrałem polecenie Merge, ponieważ ma strukturę umożliwiającą aktualizację i wstawianie w jednym zestawie, a ja potrzebowałem wykonać aktualizację osobno.
jest to kod, który pracował:
Merge
into DESTINATION as D
using SOURCE as S
on (
D.Col1 = S.Col1
and D.Col2 = S.Col2
and D.Col3 = S.Col3
)
WHEN MATCHED
THEN UPDATE SET D.Count = S.Count
WHEN NOT MATCHED THEN
INSERT (Col1, Col2, Col3, Count, timestamp)
VALUES (S.Col1, S.Col2, S.Col3, S.Count, S.timestamp);
uwaga: kiedy napisałem pierwszy to pytanie Zadzwoniłem tabele AAA
i BBB
. I edytowane i zmieniane nazwy AAA
do SOURCE
I BBB
do DESTINATION
dla jasności
Doskonały przypadek użycia dla polecenia MERGE. –
Świetna odpowiedź! Nie wiedziałem o MERGE, ale nadal używam 2005 (przez kilka następnych tygodni), z pewnością będę go używał w przyszłości. – richardtallent
Próbuję dowiedzieć się, jak z niego korzystać. przykład w dokumentacji wymaga przejrzenia elementów w tabeli AAA. Myślę, że używając prawego wyboru należy tego unikać. – Barka