SQL Server MERGE
Samenvatting: in deze tutorial leert u hoe u de SQL Server MERGE instructie om gegevens in een tabel bij te werken op basis van waarden die overeenkomen met een andere tabel.
Introductie SQL Server MERGE-instructie
Stel dat u twee tabellen hebt met de naam bron- en doeltabellen, en u moet werk de doeltabel bij op basis van de waarden die overeenkomen met de brontabel. Er zijn drie gevallen:
- De brontabel heeft een aantal rijen die niet voorkomen in de doeltabel. In dit geval moet u rijen die in de brontabel staan, invoegen in de doeltabel.
- De doeltabel heeft enkele rijen die niet in de brontabel voorkomen. In dit geval moet u rijen uit de doeltabel verwijderen.
- De brontabel heeft enkele rijen met dezelfde toetsen als de rijen in de doeltabel. Deze rijen hebben echter verschillende waarden in de niet-sleutelkolommen. In dit geval moet u de rijen in de doeltabel bijwerken met de waarden die uit de brontabel komen.
De volgende afbeelding illustreert de bron- en doeltabellen met de bijbehorende acties: invoegen, bijwerken en verwijderen:
Als u gebruik de INSERT, UPDATE, en DELETE -instructie afzonderlijk, je moet drie afzonderlijke instructies om de gegevens naar de doeltabel bij te werken met de overeenkomende rijen uit de brontabel.
SQL Server biedt echter de MERGE -instructie waarmee u drie acties tegelijkertijd. Het volgende toont de syntaxis van de MERGE -instructie:
Code language: SQL (Structured Query Language) (sql)
Geef eerst de doeltabel en de bron op tabel in de MERGE -clausule.
Ten tweede bepaalt de merge_condition hoe de rijen uit de brontabel worden vergeleken met de rijen van de doeltabel. Het is vergelijkbaar met de join-voorwaarde in de join-clausule. Normaal gesproken gebruikt u de sleutelkolommen ofwel de primaire sleutel ofwel de unieke sleutel om te matchen.
Ten derde resulteert de merge_condition in drie statussen: MATCHED, NOT MATCHED, en NOT MATCHED BY SOURCE.
-
MATCHED: dit zijn de rijen die overeenkomen met de samenvoegvoorwaarde. In het diagram zijn ze blauw weergegeven. Voor de overeenkomende rijen moet u de rijen kolommen in de doeltabel bijwerken met waarden uit de brontabel. -
NOT MATCHED: dit zijn de rijen van de bron tabel die geen overeenkomende rijen in de doeltabel bevat. In het diagram worden ze oranje weergegeven. In dit geval moet u de rijen uit de brontabel toevoegen aan de doeltabel. Merk op datNOT MATCHEDook bekend staat alsNOT MATCHED BY TARGET. -
NOT MATCHED BY SOURCE: dit zijn de rijen in de doeltabel die niet overeenkomen met de rijen in de brontabel. Ze worden in het diagram groen weergegeven. Als u de doeltabel wilt synchroniseren met de gegevens uit de brontabel, moet u deze overeenkomstvoorwaarde gebruiken om rijen uit de doeltabel te verwijderen.
SQL Server MERGE-instructie voorbeeld
Stel dat we twee tabellen hebben sales.category en sales.category_staging die de verkopen per productcategorie opslaan.
Om gegevens bij te werken naar de sales.category (doeltabel) met de waarden van de sales.category_staging (brontabel), gebruik je de volgende MERGE instructie:
In dit voorbeeld hebben we de waarden in de category_id -kolommen in beide tabellen gebruikt als de samenvoegvoorwaarde.
- Ten eerste, de rijen met id 1, 3, 4 uit de
sales.category_staging-tabel komt overeen met de rijen uit de doeltabel, daarom werkt de instructieMERGEde waarden bij in categorienaam en bedrag kolommen in desales.categorytabel. - Ten tweede bestaan de rijen met id 5 en 6 uit de
sales.category_stagingtabel niet in desales.categorytabel, dus deMERGEinstructie voegt deze rijen in de doeltabel in. - Ten derde, de rij met id 2 van de
sales.category-tabel bestaat niet in desales.sales_staging-tabel, daarom is deMERGE-instructie verwijdert deze rij.
Als resultaat van de fusie worden de gegevens in de tabel sales.category volledig gesynchroniseerd met de gegevens in de sales.category_staging tabel.
In deze tutorial heeft u geleerd hoe u de SQL Server MERGE -instructie gebruikt om wijzigingen aan te brengen in een tabel gebaseerd op overeenkomende waarden uit een andere tabel.