Impostazione dell'ordine di elaborazione degli articoli di mergeSpecify the Processing Order of Merge Articles

A partire da MicrosoftMicrosoft SQL Server 2005SQL Server 2005, è possibile eseguire l'override dell'ordine predefinito dell'elaborazione degli articoli per le pubblicazioni di tipo merge.Beginning with MicrosoftMicrosoft SQL Server 2005SQL Server 2005, it is possible to override the default order of article processing for merge publications. Ciò risulta utile, ad esempio, se si definisce l'integrità referenziale tramite trigger e tali trigger devono essere attivati in un determinato ordine.This is useful, for example, if you define referential integrity through triggers and those triggers must fire in a certain order.

Per specificare l'ordine di elaborazione degli articoliTo specify the processing order of articles

Modalità di determinazione dell'ordine di elaborazioneHow Processing Order is Determined

Durante la sincronizzazione di tipo merge, gli articoli vengono elaborati per impostazione predefinita nell'ordine richiesto dalle dipendenze tra gli oggetti, inclusi i vincoli di integrità referenziale dichiarativa definiti nelle tabelle di base.During merge synchronization, articles are, by default, processed in the order required by the dependencies between objects, including the declarative referential integrity (DRI) constraints defined on the base tables. L'elaborazione prevede l'enumerazione delle modifiche apportate a una tabella e quindi l'applicazione di tali modifiche.Processing involves enumerating the changes to a table and then applying those changes. Se non è presente l'integrità referenziale dichiarativa ma esistono filtri join o record logici tra gli articoli di tabella, gli articoli vengono elaborati nell'ordine richiesto dai filtri e dai record logici.If no DRI is present but join filters or logical records exist between table articles, the articles are processed in the order required by the filters and logical records. Gli articoli non correlati ad altri articoli tramite integrità referenziale dichiarativa, filtri join, record logici o altre dipendenze vengono elaborati in base al nome alternativo dell'articolo nella tabella di sistema sysmergearticles (Transact-SQL).Articles not related to any other article through DRI, join filters, logical records, or other dependencies are processed according to the article nickname in the sysmergearticles (Transact-SQL) system table.

Si consideri una pubblicazione in cui sono incluse le tabelle SalesOrderHeader e SalesOrderDetail con una colonna chiave primaria SalesOrderID nella tabella SalesOrderHeader e una colonna chiave esterna SalesOrderID corrispondente nella tabella SalesOrderDetail .Consider a publication that includes the tables SalesOrderHeader and SalesOrderDetail with a primary key column SalesOrderID in the SalesOrderHeader table and a corresponding foreign key column SalesOrderID in the SalesOrderDetail table. Durante la sincronizzazione, la replica di tipo merge impedisce le violazioni della chiave esterna inserendo nuove righe in SalesOrderHeader prima dell'inserimento delle righe associate in SalesOrderDetail.During synchronization, merge replication prevents foreign key violations by inserting any new rows in SalesOrderHeader before inserting associated rows in SalesOrderDetail. Analogamente, le righe vengono eliminate da SalesOrderDetail prima dell'eliminazione delle righe associate da SalesOrderHeader.Similarly, rows are deleted from SalesOrderDetail before the associated row is deleted from SalesOrderHeader.

In alcune applicazioni, tuttavia, l'integrità referenziale viene applicata tramite trigger di database o a livello di applicazione, anziché tramite integrità referenziale dichiarativa.However, in some applications referential integrity is enforced through database triggers, or at the application level, rather than through DRI. Nel caso della pubblicazione sopra descritta, anziché utilizzare l'integrità referenziale dichiarativa, la tabella SalesOrderDetail potrebbe disporre di un trigger di inserimento in grado di verificare l'esistenza della riga associata nella tabella SalesOrderHeader prima di consentire un inserimento.Given the publication described above, instead of DRI, the SalesOrderDetail table could have an insert trigger that ensures the associated row in the SalesOrderHeader table exists before allowing an insert. SalesOrderHeader potrebbe disporre di un trigger di eliminazione in grado di verificare l'assenza di righe associate in SalesOrderDetail prima di consentire un'eliminazione.SalesOrderHeader could have a delete trigger that ensures there are no associated rows in SalesOrderDetail before allowing a delete. I trigger non vengono presi in considerazione nella replica di tipo merge per determinare l'ordine di elaborazione degli articoli, poiché non è possibile determinare il risultato del trigger finché non viene attivato.Merge replication does not take into account triggers when determining processing order of articles because it cannot determine what the result of the trigger will be until it has fired. Analogamente, nella replica non possono essere considerati i vincoli definiti a livello di applicazione.Similarly, replication cannot take into account constraints defined at the application level.

In caso di mantenimento dell'integrità referenziale tramite trigger o a livello di applicazione, è consigliabile specificare l'ordine in cui gli articoli devono essere elaborati.When referential integrity is maintained through triggers or at the application level, you should specify the order in which the articles should be processed. Nell'esempio con i trigger, verrà specificato che la tabella SalesOrderHeader deve essere elaborata prima di SalesOrderDetail, poiché l'ordine degli articoli è basato sull'ordine di inserimento.In the example with triggers, you would specify that the SalesOrderHeader table should be processed before SalesOrderDetail, because article ordering is based on insert order. Nella replica di tipo merge verrà automaticamente invertito l'ordine per le eliminazioni.Merge replication will automatically reverse the order for deletes. La replica di tipo merge non avrà esito negativo se gli articoli non vengono ordinati, poiché l'agente di merge continua a elaborare gli articoli in caso di violazione di un vincolo e quindi ripete le operazioni non riuscite dopo l'elaborazione degli altri articoli.Merge replication will not fail without article ordering, because the Merge Agent continues to process articles if a constraint violation occurs; it then retries any operations that failed after other articles have been processed. Specificando l'ordine degli articoli è semplicemente possibile evitare i successivi tentativi e l'elaborazione aggiuntiva associata.Specifying article order simply avoids retries and the additional processing associated with them. Se si specifica un ordine non corretto, ad esempio un ordine che determina l'elaborazione dei record di dettagli prima dei record di intestazione, la replica di tipo merge ripeterà l'elaborazione finché non avrà esito positivo.If you specify an incorrect order (for example, one that results in detail records being processed before header records), merge replication will retry processing until it succeeds.

Vedere ancheSee Also

Opzioni degli articoli per la replica di tipo merge Article Options for Merge Replication
Raggruppare modifiche alle righe correlate con record logici Group Changes to Related Rows with Logical Records
Join Filters Join Filters