Unisci
Il prefisso Merge può essere aggiunto a qualsiasi istruzione LOAD o SELECT nello script per specificare che dovrebbe aggiungere record a un'altra tabella. Specifica anche che questa istruzione dovrebbe essere eseguita in un ricaricamento parziale.
Il caso tipico di utilizzo riguarda il caricamento di un registro dei cambiamenti che si desidera utilizzare per applicare inserts, updates e deletes a una tabella esistente.
Syntax:
Merge [only] [(SequenceNoField [, SequenceNoVar])] On ListOfKeys [Concatenate [(TableName)]] (loadstatement | selectstatement)
Durante un caricamento normale (non parziale), la costruzione LOAD Unisci funzionerà come una normale istruzioneLoad ma con la funzionalità aggiuntiva di rimuovere i record vecchi e obsoleti e i record contrassegnati per l'eliminazione. Il primo campo dell'istruzione load deve presentare informazioni sull'operazione: Insert, Update o Delete.
Per ciascun record caricato, l'identificatore record verrà confrontato con i record precedentemente caricati e verrà conservato solo il record più recente (in base al numero di sequenza). Se il record più recente è contrassegnato con Delete, non ne verrà conservato nessuno.
Se viene utilizzato il prefisso Concatenate o se esiste già una tabella con lo stesso set di campi, questa sarà la tabella pertinente da modificare. In caso contrario, il risultato della costruzione LOAD Unisci verrà archiviato in una nuova tabella.
Se viene utilizzato il prefisso Concatenate, la tabella risultante può avere più campi rispetto al registro di modifica utilizzato come input per Unisci.
Un caricamento parziale consentirà di ottenere lo stesso risultato di un caricamento completo. L'unica differenza è che la costruzione LOAD Unisci non creerà mai una nuova tabella. Esiste sempre una tabella pertinente dall'esecuzione script precedente da modificare.
Se il registro delle modifiche caricato è di tipo accumulato, ovvero contiene modifiche già caricate, il parametro SequenceNoVar può essere utilizzato in una clausola Where per limitare la quantità di dati di input. La costruzione LOAD Unisci può quindi essere realizzata per caricare soltanto i record in cui il campo SequenceNoField è superiore a SequenceNoVar. Al completamento, la costruzione LOAD Unisci assegnerà un nuovo valore a SequenceNoVar con il valore massimo visto nel campo SequenceNoField.
Arguments:
Argomento | Descrizione |
---|---|
only | Un qualificatore opzionale che denota che l'istruzione dovrebbe essere eseguita solo durante i caricamenti parziali. Deve essere ignorata durante i caricamenti normali (non parziali). |
SequenceNoField | Il nome del campo contenente una data e ora o un numero di sequenza che definisce l'ordine delle operazioni. |
SequenceNoVar |
Il nome della variabile che viene assegnata al valore massimo per SequenceNoField della tabella unita. |
ListOfKeys | Un elenco separato da virgole di nomi di campo che specifica la chiave primaria. |
operation | Il primo campo dell'istruzione load deve contenere l'operazione: Vengono accettati anche Insert, Update o Delete. ‘i’, ‘u’ e ‘d’. |
Example: Script di caricamento dei dati
In questo esempio, una tabella inline denominata Persons viene caricata con quattro righe. Unisce quindi modifica la tabella nel modo seguente:
- Aggiunge la riga, Mary, 4
- Elimina la riga, Steven, 3
- Assegna il numero 5 a Jake
La variabile LastChangeDate verrà impostata al valore massimo nella colonna ChangeDate dopo l'esecuzione di Unisci.
Prima del caricamento Unisci, la tabella risultante appare come segue:
Name | Number |
---|---|
Jake | 3 |
Jill | 2 |
Steven | 3 |
A seguito del caricamento Unisci, la tabella appare come segue:
ChangeDate | Name | Number |
---|---|---|
2/1/2021 | Jake | 5 |
- | Jill | 2 |
1/1/2021 | Mary | 4 |
Quando i dati vengono caricati, la finestra di dialogo Avanzamento caricamento dati mostra le operazioni che vengono eseguite:
Example: Script di caricamento dati - Caricamento parziale
Nell'esempio seguente, l'argomento Solo specifica che il comando Unisci verrà eseguito solo durante un caricamento parziale. Gli aggiornamenti verranno filtrati in base al valore LastChangeDate precedentemente acquisito. Al termine dell'operazione Unisci, alla variabile LastChangeDate verrà assegnato il valore massimo della colonna ChangeDate elaborato durante l'unione