Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Rozdział2:UsprawnieniaT-SQL
Wybórmetodyzłączania
SQLServerautomatycznieanalizujeinstrukcjeMERGEzawierająceróżnekombinacje
klauzulscalaniainatejpodstawieprzeprowadzaodpowiedniegotypuzłączenie,które
dostarczaniezbędnedanezobiektuźródłowegoorazdocelowego.Dostępnesątrzy
typyzłączeńiSQLServerwybieranajodpowiedniejszewdanejsytuacjiwoparciu
oklauzulescalaniaznajdującesięwinstrukcjiMERGE,jakpokazanowTabeli2-3.
TABELA2-3Typyzłączeńobiektuźródłowegoidocelowegowybieraneprzez
SQLServerwoparciuoklauzulę(-e)winstrukcjiMerge
Prawidłowe
Typzłączenia
Zwraca
akcje
Inner
Pasującedanezobiek-
UPDATE,
tuźródłowego
DELETE
idocelowego
WHENNOTMATCHED
Leftouter
Daneźródłowenieznaj-
dującesięwobiekcie
docelowym
INSERT
[BYTARGET]
WHENNOTMATCHED
Rightouter
Danedocelowenieznaj-
UPDATE,
BYSOURCE
dującesięwobiekcie
DELETE
źródłowym
WHENNOTMATCHED
Fullouter
Daneźródłowenieznaj-
dującesięwobiekcie
INSERT,
UPDATE,
[BYTARGET]wpołącze-
niuzinnąklauzulą
docelowymiinne
DELETE
pasującelubniepa-
sującedanezobiektu
docelowego
KlauzulaMerge
WHENMATCHED
KlauzulaWHENMATCHEDzwracawiersze,któreznajdująsięwobutabelach(tzn.
wierszewobutabelachzpasującymidosiebiewartościamiwkolumniekluczazłącza-
niazdefiniowanejwklauzuliON).KwerendazostajeprzetworzonajakoINNERJOIN,
ponieważpobieranesąjedyniewierszeznajdującesięwobutabelach.Wklauzuli
WHENMATCHEDznajdowaćsięmożeoperacjaUPDATElubDELETEdoprzeprowa-
dzenianawierszachdocelowych.
KlauzulaWHENNOTMATCHED[BYTARGET]jesttraktowanajakoLEFTOUTER
JOIN,ponieważpobierajedyniewiersze,którenieznajdująsięwobiekciedocelowym.
WzwiązkuztymtylkooperacjawstawianiamożebyćrealizowanawklauzuliWHEN
NOTMATCHED[BYTARGET]wcelu„uzupełnienialuki”wobiekciedocelowymza
pomocąbrakującychdanychzobiektuźródłowego.
KlauzulaWHENMATCHEDstanowiuzupełnieniedlaklauzuliWHENNOT
MATCHED[BYTARGET]iskutkujeoperacjąRIGHTOUTERJOIN,którasłuży
dopobraniajedyniewierszydocelowych,którenieznajdująsięwobiekcieźródłowym.
83