Controllo di vincoli, identità e trigger con l'opzione NOT FOR REPLICATION

In alcuni casi è consigliabile considerare l'attività dell'utente in una topologia di replica diversamente dall'attività dell'agente. Se, ad esempio, nel server di pubblicazione viene inserita una riga da un utente e tale inserimento soddisfa un vincolo CHECK nella tabella, potrebbe non essere necessario imporre lo stesso vincolo quando la riga viene inserita da un agente di replica nel Sottoscrittore. L'opzione NOT FOR REPLICATION consente di specificare che gli oggetti di database indicati di seguito devono essere considerati in modo diverso quando un agente di replica esegue un'operazione:

  • Vincoli di chiave esterna

    Il vincolo di chiave esterna non viene applicato quando un agente di replica esegue un'operazione di inserimento, aggiornamento o eliminazione.

  • Vincoli CHECK

    Il vincolo CHECK non viene applicato quando un agente di replica esegue un'operazione di inserimento, aggiornamento o eliminazione.

  • Colonne Identity

    Il valore della colonna Identity non viene incrementato quando un agente di replica esegue un'operazione di inserimento.

  • Trigger

    Il trigger non viene eseguito quando un agente di replica esegue un'operazione di inserimento, aggiornamento o eliminazione.

Quando viene pubblicata una tabella, le opzioni dello schema controllano la modalità di creazione degli oggetti nel database di sottoscrizione. Le opzioni dello schema predefinite variano in base alla pubblicazione. Quando si impostano opzioni per specificare che i vincoli FOREIGN KEY e i vincoli CHECK vengono creati nel database di sottoscrizione, viene impostata l'opzione NOT FOR REPLICATION. L'opzione NOT FOR REPLICATION viene impostata anche durante la replica di colonne Identity nelle pubblicazioni di tipo merge e nelle pubblicazioni transazionali che supportano le sottoscrizioni aggiornabili. Per ulteriori informazioni sulla replica delle colonne Identity, vedere Replica di colonne Identity.

Nella maggior parte dei casi le impostazioni predefinite sono appropriate, ma è possibile modificarle qualora per un'applicazione sia necessario un funzionamento diverso. I trigger rappresentano l'elemento principale da considerare. Se, ad esempio, si definisce un trigger di inserimento con l'opzione NOT FOR REPLICATION impostata, il trigger verrà attivato da tutti gli inserimenti eseguiti dagli utenti, ma non da quelli eseguiti dagli agenti di replica. Si consideri un trigger che inserisce dati in una tabella di rilevamento. Quando l'utente inserisce inizialmente la riga, è corretto che il trigger venga attivato e inserisca una riga nella tabella di rilevamento. Il trigger non deve invece essere attivato quando i dati vengono replicati nel Sottoscrittore, in quanto nella tabella di rilevamento verrebbe inserita una riga non necessaria.

Per specificare l'opzione NOT FOR REPLICATION

È possibile specificare l'opzione NOT FOR REPLICATION nei modi seguenti: