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:

  1. 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.
  2. De doeltabel heeft enkele rijen die niet in de brontabel voorkomen. In dit geval moet u rijen uit de doeltabel verwijderen.
  3. 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 dat NOT MATCHED ook bekend staat als NOT 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 instructie MERGE de waarden bij in categorienaam en bedrag kolommen in de sales.category tabel.
  • Ten tweede bestaan de rijen met id 5 en 6 uit de sales.category_staging tabel niet in de sales.category tabel, dus de MERGE instructie voegt deze rijen in de doeltabel in.
  • Ten derde, de rij met id 2 van de sales.category -tabel bestaat niet in de sales.sales_staging -tabel, daarom is de MERGE -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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *