Merge
Merge-prefixet kan adderas till valfri LOAD- eller SELECT-sats i skriptet för att specificera att den laddade tabellen ska slås samman med en annan tabell. Det specificerar även att satsen ska köras i en delvis laddning.
Används ofta när du laddar en ändringslogg och vill använda denna för att tillämpa inserts, updates och deletes på en befintlig tabell.
Syntax:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
Vid en vanlig (ej delvis) laddning fungerar konstruktionen Merge LOAD som en vanlig LOAD-sats, med tillägget att äldre, obsoleta poster tas bort, liksom poster som markerats för borttagning. Det första fältet i LOAD-satsen måste innehålla information om operationen: Insert, Update eller Delete.
För varje post som laddas jämförs postens identifierare med poster som laddats tidigare, och bara den senaste posten (enligt ordningstalet) sparas. Om den senaste posten har en Delete-markering sparas inte någon.
Om Concatenate-prefixet används, eller om det redan finns en tabell med samma uppsättning fält, blir detta den tabell som ska ändras. Annars sparas resultatet av konstruktionen Merge LOAD i en ny tabell.
Om Concatenate-prefixet används kan den resulterande tabellen ha fler fält än den ändringslogg som används som indata för Merge.
En delvis laddning gör samma sak som en fullständig laddning. Den enda skillnaden är att konstruktionen Merge LOAD aldrig skapar en ny tabell. Det finns alltid en relevant tabell att ändra, från föregående skriptexekvering.
Om den laddade ändringsloggen är en ackumulerad logg, det vill säga innehåller ändringar som redan har laddats, kan parametern SequenceNoVar användas i en Where-sats för att begränsa mängden indata. Då kan Merge LOAD formuleras så att bara poster där fältet SequenceNoField är större än SequenceNoVar laddas. När exekveringen är klar tilldelar Merge LOAD ett nytt värde till SequenceNoVar med det största värde som finns i fältet SequenceNoField.
Arguments:
Argument | Beskrivning |
---|---|
only | En valfri kvalificerare som innebär att satsen bara ska exekveras vid delvisa laddningar. Den ska ignoreras vid vanliga (ej delvisa) laddningar. |
SequenceNoField | Namnet på det fält som innehåller en tidsmarkör eller ett ordningstal som definierar ordningen för operationerna. |
SequenceNoVar |
Namnet på den variabel som blir tilldelad det högsta värdet för SequenceNoField i tabellen som slås ihop. |
ListOfKeys | En kommaavgränsad lista med fältnamn som specificerar den primära nyckeln. |
operation | Det första fältet i LOAD-satsen måste innehålla operationen: Insert, Update eller Delete. ’i’, ’u’ och ’d’ accepteras också. |
Example: Dataladdningsskript
I det här exemplet laddas en inline-tabell med namnet Persons med fyra rader. Sedan ändrar Merge tabellen på följande sätt:
- Lägger till raden Mary, 4
- Tar bort raden Steven, 3
- Tilldelar talet 5 till Jake
Variabeln LastChangeDate anges som det högsta värdet i kolumnen ChangeDate efter att Merge har exekverats.
Före Merge-laddningen ser tabellen ut så här:
Name | Number |
---|---|
Jake | 3 |
Jill | 2 |
Steven | 3 |
Efter Merge-laddningen ser tabellen ut så här:
ChangeDate | Name | Number |
---|---|---|
2/1/2021 | Jake | 5 |
- | Jill | 2 |
1/1/2021 | Mary | 4 |
När data laddas visas operationerna som utförs i dialogrutan Dataladdning:
Example: Dataladdningsskript – delvis laddning
I följande exempel specificerar Only-argumentet att Merge-kommandot bara ska exekveras vid en delvis laddning. Uppdateringar kommer att filtreras utifrån det tidigare beskrivna LastChangeDate. När Merge är klart kommer LastChangeDate-variabeln att tilldelas det största värdet i kolumnen ChangeDate, som bearbetats under sammanslagningen.