Filtres paramétrés - Filtres de lignes paramétrésParameterized Filters - Parameterized Row Filters

Les filtres de lignes paramétrables permettent l'envoi de différentes partitions de données à divers Abonnés sans qu'il soit nécessaire de créer plusieurs publications (les filtres paramétrés étaient précédemment désignés par le terme « filtres dynamiques » dans les versions antérieures de SQL ServerSQL Server).Parameterized row filters allow different partitions of data to be sent to different Subscribers without requiring multiple publications to be created (parameterized filters were referred to as dynamic filters in previous versions of SQL ServerSQL Server). Une partition est un sous-ensemble de lignes d'une table ; selon les paramètres sélectionnés lors de la création d'un filtre de lignes paramétrable, chaque ligne d'une table publiée peut appartenir à une seule partition (ce qui donne des partitions qui ne se chevauchent pas), ou à deux ou plusieurs partitions (auquel cas, elles se chevauchent).A partition is a subset of the rows in a table; depending on the settings chosen when creating a parameterized row filter, each row in a published table can belong to one partition only (which produces nonoverlapping partitions) or to two or more partitions (which produces overlapping partitions).

Les partitions qui ne se chevauchent pas peuvent être partagées entre plusieurs abonnements ou limitées à un seul d'entre eux.Nonoverlapping partitions can be shared among subscriptions or they can be restricted so that only one subscription receives a given partition. Les paramètres qui contrôlent le comportement de la partition sont décrits dans la section « Utilisation des options de filtrage appropriées » plus loin dans cette rubrique.The settings that control partition behavior are described in "Using the Appropriate Filtering Options" later in this topic. Avec ces paramètres, vous pouvez adapter le filtrage paramétré aux besoins des applications et de performance.Using these settings you can tailor parameterized filtering according to application and performance requirements. En général, les partitions qui se chevauchent offrent davantage de souplesse, tandis que les partitions qui ne se chevauchent pas et sont répliquées sur un seul abonnement offrent de meilleures performances.In general, overlapping partitions allow for greater flexibility, and nonoverlapping partitions replicated to a single subscription provide better performance.

Les filtres paramétrés sont utilisés sur une seule table et généralement combinés à des filtres de jointure afin d'étendre le filtrage aux tables connexes.Parameterized filters are used on a single table and are typically combined with join filters to extend filtering to related tables. Pour plus d’informations, voir Join Filters.For more information, see Join Filters.

Pour définir ou modifier un filtre de lignes paramétré, consultez Définir et modifier un filtre de lignes paramétrable pour un article de fusion.To define or modify a parameterized row filter, see Define and Modify a Parameterized Row Filter for a Merge Article.

Fonctionnement des filtres paramétrésHow Parameterized Filters Work

Un filtre de lignes paramétré utilise une clause WHERE pour sélectionner les données appropriées à publier.A parameterized row filter uses a WHERE clause to select the appropriate data to be published. Plutôt que de spécifier une valeur littérale dans la clause (comme dans un filtre de lignes statique), vous spécifiez l'une des deux fonctions système suivantes ou les deux : SUSER_SNAME() et HOST_NAME().Rather than specifying a literal value in the clause (as you do with a static row filter), you specify one or both of the following system functions: SUSER_SNAME() and HOST_NAME(). Il est également possible d'utiliser des fonctions définies par l'utilisateur mais elles doivent inclure SUSER_SNAME() ou HOST_NAME() dans le corps de la fonction ou évaluer l'une de ces fonctions système (par exemple, MyUDF(SUSER_SNAME()).User-defined functions can also be used, but they must include SUSER_SNAME() or HOST_NAME() in the body of the function, or evaluate one of these system functions (such as MyUDF(SUSER_SNAME()). Si une fonction définie par l'utilisateur inclut SUSER_SNAME() ou HOST_NAME() dans le corps de la fonction, vous ne pouvez pas passer de paramètres à la fonction.If a user-defined function includes SUSER_SNAME() or HOST_NAME() in the body of the function, you cannot pass parameters to the function.

Les fonctions système SUSER_SNAME() et HOST_NAME() ne sont pas propres à la réplication de fusion mais elles sont utilisées par celle-ci pour le filtrage paramétré :The system functions SUSER_SNAME() and HOST_NAME() are not specific to merge replication, but they are used by merge replication for parameterized filtering:

  • SUSER_SNAME() retourne des informations de connexion sur les connexions établies avec une instance de SQL ServerSQL Server.SUSER_SNAME() returns login information for connections made to an instance of SQL ServerSQL Server. Lorsqu'elle est utilisée dans un filtre paramétré, elle retourne le nom de connexion utilisé par l'Agent de fusion pour se connecter au serveur de publication (spécifié lorsque vous créez un abonnement).When used in a parameterized filter, it returns the login used by the Merge Agent to connect to the Publisher (you specify a login when you create a subscription).

  • HOST_NAME() retourne le nom de l'ordinateur qui se connecte à une instance de SQL ServerSQL Server.HOST_NAME() returns the name of the computer that is connecting to an instance of SQL ServerSQL Server. Lorsqu'elle est utilisée dans un filtre paramétré, elle retourne par défaut le nom de l'ordinateur exécutant l'Agent de fusion.When used in a parameterized filter, by default it returns the name of the computer on which the Merge Agent is running. Pour les abonnements extraits, il s'agit du nom du serveur de publication tandis que pour les abonnements envoyés, c'est celui du serveur de distribution.For pull subscriptions it is the name of the Subscriber; for push subscriptions it is the name of the Distributor.

    Il est également possible de remplacer cette fonction par une valeur autre que le nom du serveur de publication ou de distribution.It is also possible to override this function with a value other than the name of the Subscriber or Distributor. En général les applications remplacent cette fonction par des valeurs plus explicites, telles qu'un nom de vendeur ou un ID de vendeur.Typically applications override this function with more meaningful values, such as a salesperson name or salesperson ID. Pour plus d'informations, consultez la section « Substitution de la valeur de HOST_NAME() » dans cette rubrique.For more information, see the section "Overriding the HOST_NAME() Value" in this topic.

    La valeur retournée par la fonction système est comparée à une colonne spécifiée dans la table que vous filtrez et les données appropriées sont téléchargées vers l'Abonné.The value returned by the system function is compared to a column you specify in the table you are filtering, and the appropriate data is downloaded to the Subscriber. Cette comparaison est effectuée au moment de l'initialisation de l'abonnement (dès lors, seules les données pertinentes sont contenues dans l'instantané initial) et à chaque synchronisation de l'abonnement.This comparison is made when the subscription is initialized (so only the appropriate data is contained in the initial snapshot) and every time the subscription is synchronized. Par défaut, si une modification apportée sur le serveur de publication enlève une ligne d’une partition, la ligne est supprimée sur l’abonné (ce comportement est contrôlé à l’aide du paramètre @allow_partition_realignment de sp_addmergepublication (Transact-SQL)).By default, if a change at the Publisher results in a row being moved out of a partition, the row is deleted at the Subscriber (this behavior is controlled using the @allow_partition_realignment parameter of sp_addmergepublication (Transact-SQL)).

Note

Lors des comparaisons effectuées pour les filtres paramétrés, le classement de la base de données est toujours utilisé.When comparisons are made for parameterized filters, the database collation is always used. Si, par exemple, le classement de la base de données ne respecte pas la casse mais que le classement de la table ou de la colonne le fait, la comparaison ne tiendra pas compte de la casse.For example, if the database collation is case insensitive, but the table or column collation is case sensitive, the comparison will be case insensitive.

Filtrage avec SUSER_SNAME()Filtering with SUSER_SNAME()

Prenons l'exemple de la table Employee dans la base de données exemple Adventure WorksAdventure WorksConsider the Employee Table in the Adventure WorksAdventure Works sample database. Cette table comprend la colonne LoginIDqui contient le nom de connexion de chaque employé sous la forme «domaine\connexion».This table includes the column LoginID, which contains the login for each employee in the form 'domain\login'. Pour filtrer la table afin que les employés reçoivent uniquement les données qui les concernent, spécifiez la clause de filtre suivante :To filter this table so that employees receive only the data related to them, specify a filter clause of:

LoginID = SUSER_SNAME()  

Par exemple la valeur d'un des employés est « adventure-works\john5 ».For example, the value for one of the employees is 'adventure-works\john5'. Lorsque l'Agent de fusion se connecte au serveur de publication, il utilise le nom de connexion spécifié lors de la création de l'abonnement (dans ce cas-ci, adventure-works\john5).When the Merge Agent connects to the Publisher, it uses the login you specified when creating the subscription (in this case 'adventure-works\john5'). L'Agent de fusion compare ensuite la valeur retournée par SUSER_SNAME() aux valeurs de la table et ne télécharge que la ligne qui contient la valeur « adventure-works\john5 » dans la colonne LoginID .The Merge Agent then compares the value returned by SUSER_SNAME() to the values in the table and downloads only the row that contains a value of 'adventure-works\john5' in the LoginID column.

Filtrage avec HOST_NAME()Filtering with HOST_NAME()

Prenons l'exemple de la table HumanResources.Employee .Consider the HumanResources.Employee table. Supposons que cette table contient une colonne ComputerName avec le nom de l'ordinateur de chaque employé désigné sous la forme «nom_typeordinateur».Suppose this table contained a column such as ComputerName with the name of each employee's computer in the form 'name_computertype'. Pour filtrer la table afin que les employés reçoivent uniquement les données qui les concernent, spécifiez la clause de filtre suivante :To filter this table so that employees receive only the data related to them, specify a filter clause of:

ComputerName = HOST_NAME()  

Par exemple, la valeur correspondant à l'un des employés peut être « john5_laptop ».For example, the value for one of the employees could be 'john5_laptop'. Lorsque l'Agent de fusion se connecte au serveur de publication, il compare la valeur retournée par SUSER_SNAME() aux valeurs de la table et ne télécharge que la ligne contenant la valeur « john5_laptop » dans la colonne ComputerName .When the Merge Agent connects to the Publisher, it compares the value returned by HOST_NAME() to the values in the table and downloads only the row that contains a value of 'john5_laptop' in the ComputerName column.

Il est également possible de combiner les fonctions dans un filtre.It is also possible to combine the functions in a filter. Si, par exemple, vous souhaitez qu'un employé ne reçoive les données que s'il se connecte avec son nom de connexion sur son ordinateur, la clause du filtre peut se présenter comme suit :For example, if you wanted to ensure that an employee received data only if they used their login on their computer, the filter clause could be:

LoginID = SUSER_SNAME() AND ComputerName = HOST_NAME()  

À moins que vous substituiez la valeur de HOST_NAME(), le filtrage avec HOST_NAME() est, en général, uniquement utilisé avec les abonnements extraits.Unless you are overriding the HOST_NAME() value, filtering with HOST_NAME() is typically used only with pull subscriptions. La valeur retournée par la fonction est le nom de l'ordinateur exécutant l'Agent de fusion.The value returned by the function is the name of the computer on which the Merge Agent is running. Pour les abonnements extraits, la valeur est différente pour chaque abonnement alors que la valeur est identique pour les abonnements envoyés (tous les Agents de fusion s'exécutent sur le serveur de distribution dans le cas des abonnements envoyés).For pull subscriptions, the value is different for each subscription, but for push subscriptions, the value is the same (all Merge Agents run at the Distributor for push subscriptions).

Important

La valeur de la fonction HOST_NAME() peut être substituée ; par conséquent, il n'est pas possible d'utiliser des filtres qui incluent HOST_NAME() pour contrôler l'accès aux partitions de données.The value for the HOST_NAME() function can be overridden; therefore it is not possible to use filters that include HOST_NAME() to control access to partitions of data. Pour contrôler cet accès, utilisez SUSER_SNAME(), SUSER_SNAME() en combinaison avec HOST_NAME() ou employez des filtres de lignes statiques.To control access to partitions of data, use SUSER_SNAME(), SUSER_SNAME() in combination with HOST_NAME(), or use static row filters.

Substitution de la valeur de HOST_NAME()Overriding the HOST_NAME() Value

Comme indiqué ci-dessus, HOST_NAME() retourne, par défaut, le nom de l'ordinateur qui se connecte à une instance de SQL ServerSQL Server.As noted earlier, HOST_NAME() by default returns the name of the computer that is connecting to an instance of SQL ServerSQL Server. Lors de l'utilisation de filtres paramétrés, il est fréquent de remplacer cette valeur par une autre valeur au moment où vous créez l'abonnement.When using parameterized filters, it is common to override this value by supplying a value when you create a subscription. La fonction HOST_NAME() retourne alors la valeur spécifiée à la place du nom de l'ordinateur.The HOST_NAME() function then returns the value you specify rather than the name of the computer.

Note

Si vous remplacez la valeur de HOST_NAME(), tous les appels de la fonction HOST_NAME() retourneront la valeur que vous avez spécifiée.If you override HOST_NAME(), all calls to the HOST_NAME() function will return the value you specify. Assurez-vous que les autres applications ne dépendent pas de la fonction HOST_NAME() avec retour du nom de l'ordinateur.Ensure that other applications are not depending on HOST_NAME() returning the computer name.

Prenons l'exemple de la table HumanResources.Employee .Consider the HumanResources.Employee table. Cette table comprend la colonne EmployeeID.This table includes the column EmployeeID. Pour filtrer la table afin que chaque employé reçoive uniquement les données qui le concerne, spécifiez la clause de filtre :To filter this table so that each employee receives only the data related to them, specify a filter clause of:

EmployeeID = CONVERT(int,HOST_NAME())

Par exemple, l'employée Pamela Ansman-Wolfe possède l'ID d'employé 280.For example, employee Pamela Ansman-Wolfe has been assigned an employee ID of 280. Spécifiez la valeur de l'ID d'employé (280 dans notre exemple) comme valeur de HOST_NAME() lorsque vous créez un abonnement pour celle-ci.Specify the value of the employee ID (280 in our example) for the HOST_NAME() value when creating a subscription for this employee. Lorsque l'Agent de fusion se connecte au serveur de publication, il compare la valeur retournée par HOST_NAME() aux valeurs de la table et ne télécharge que la ligne contenant la valeur 280 dans la colonne EmployeeID .When the Merge Agent connects to the Publisher, it compares the value returned by HOST_NAME() to the values in the table and downloads only the row that contains a value of 280 in the EmployeeID column.

Important

Du fait que la fonction HOST_NAME() retourne une valeur de type nchar , vous devez utiliser CONVERT si la colonne dans la clause de filtre affiche un type de données numérique comme dans l'exemple ci-dessus.The HOST_NAME() function returns an nchar value, so you must use CONVERT if the column in the filter clause is of a numeric data type, as it is in the example above. Pour des raisons de performances, nous vous recommandons de ne pas appliquer de fonctions aux noms de colonnes dans les clauses de filtre de lignes paramétrables, telles que CONVERT(nchar,EmployeeID) = HOST_NAME().For performance reasons, we recommended that you do not apply functions to column names in parameterized row filter clauses, such as CONVERT(nchar,EmployeeID) = HOST_NAME(). En revanche, il est conseillé d'adopter l'approche illustrée dans l'exemple : EmployeeID = CONVERT(int,HOST_NAME()).Instead, we recommend using the approach shown in the example: EmployeeID = CONVERT(int,HOST_NAME()). Cette clause peut être utilisée pour le paramètre @subset_filterclause de sp_addmergearticlemais elle ne peut généralement pas être utilisée dans l'Assistant Nouvelle publication (l'Assistant exécute la clause de filtre pour la valider mais l'opération échoue car le nom de l'ordinateur ne peut pas être converti en un type int).This clause can be used for the @subset_filterclause parameter of sp_addmergearticle, but it typically cannot be used in the New Publication Wizard (the wizard executes the filter clause to validate it, which fails because the computer name cannot be converted to an int). Si vous utilisez l'Assistant Nouvelle publication, nous vous recommandons de spécifier CONVERT(nchar,EmployeeID) = HOST_NAME() dans l'Assistant, puis d'utiliser ensuite sp_changemergearticle pour modifier la clause en EmployeeID = CONVERT(int,HOST_NAME()) avant de créer un instantané de la publication.If you use the New Publication Wizard, we recommend specifying CONVERT(nchar,EmployeeID) = HOST_NAME() in the wizard and then use sp_changemergearticle to change the clause to EmployeeID = CONVERT(int,HOST_NAME()) before creating a snapshot for the publication.

Pour substituer la valeur de HOST_NAME()To override the HOST_NAME() value

Utilisez l'une des méthodes suivantes pour substituer la valeur de HOST_NAME() :Use one of the following methods to override the HOST_NAME() value:

Initialisation d'un abonnement à une publication avec des filtres paramétrésInitializing a Subscription to a Publication with Parameterized Filters

Lorsque vous utilisez des filtres de lignes paramétrés dans les publications de fusion, la réplication initialise chaque abonnement avec un instantané en deux parties.When parameterized row filters are used in merge publications, replication initializes each subscription with a two-part snapshot. Pour plus d’informations, voir Instantanés des publications de fusion avec des filtres paramétrés.For more information, see Snapshots for Merge Publications with Parameterized Filters.

Utilisation des options de filtrage appropriéesUsing the Appropriate Filtering Options

Vous contrôlez essentiellement deux processus lorsque vous utilisez les filtres paramétrés :There are two key areas over which you have control when using parameterized filters:

  • le mode de traitement des filtres par réplication de fusion, qui est contrôlé par l'un des deux paramètres de publication : use partition groups et keep partition changes.How the filters are processed by merge replication, which is controlled by one of two publication settings: use partition groups and keep partition changes.

  • le mode de partage des données entre Abonnés, lequel est identifié par le paramètre d'article partition options.How the data is shared among Subscribers, which must be reflected by the article setting partition options.

    Pour définir des options de filtrage, consultez Optimize Parameterized Row Filters.To set filtering options, see Optimize Parameterized Row Filters.

Définition de « use partition groups » et « keep partition changes »Setting 'use partition groups' and 'keep partition changes'

Les options use partition groups et keep partition changes améliorent les performances de synchronisation des publications avec des articles filtrés en stockant des métadonnées supplémentaires dans la base de données de publication.Both the use partition groups and keep partition changes options improve the synchronization performance for publications with filtered articles by storing additional metadata in the publication database. C'est l'option use partition groups qui améliore le plus les performances grâce à l'utilisation de la fonctionnalité de partitions précalculées.The use partition groups option provides greater performance improvement through the use of the precomputed partitions feature. Par défaut, cette option est définie à true si les articles de votre publication respectent un ensemble de conditions.This option is set to true by default if the articles in your publication adhere to a set of requirements. Pour plus d’informations sur ces exigences, consultez Optimiser les performances des filtres paramétrés avec des partitions précalculées.For more information about these requirements, see Optimize Parameterized Filter Performance with Precomputed Partitions. Si vos articles ne répondent pas aux conditions d'utilisation requises pour l'emploi de partitions précalculées, l'option keep partition changes a la valeur true.If your articles do not meet the requirements for using precomputed partitions, the keep partition changes option to is set to true.

Définition de « partition options »Setting 'partition options'

Vous spécifiez une valeur pour la propriété partition options lors de la création d'un article, selon la façon dont les données de la table filtrée seront partagées par les Abonnés.You specify a value for the partition options property when creating an article, according to the way in which data in the filtered table will be shared by Subscribers. Vous pouvez attribuer une à quatre valeurs à l'aide de sp_addmergearticle, sp_changemergearticleet de la boîte de dialogue Propriétés de l'article .The property can be set to one of four values using sp_addmergearticle, sp_changemergearticle, and the Article Properties dialog box. La propriété peut avoir deux valeurs différentes lorsque vous la définissez dans les boîtes de dialogue Ajouter un filtre ou Modifier le filtre , auxquelles vous accédez à partir de l'Assistant Nouvelle publication et la boîte de dialogue Propriétés de la publication .The property can be set to one of two values using the Add Filter or Edit Filter dialog boxes, which are available from the New Publication Wizard and the Publication Properties dialog box. Le tableau suivant récapitule les valeurs disponibles :The following table summarizes the available values:

DescriptionDescription Valeur dans Ajouter un filtre et Modifier un filtreValue in Add Filter and Edit Filter Valeur dans Propriétés de l'articleValue in Article Properties Valeur dans les procédures stockéesValue in stored procedures
Les données dans les partitions se chevauchent et l'Abonné peut mettre à jour des colonnes référencées dans un filtre paramétré.Data in the partitions is overlapping, and the Subscriber can update columns referenced in a parameterized filter. Une ligne de cette table ira à plusieurs abonnementsA row from this table will go to multiple subscriptions ChevauchementOverlapping 00
Les données dans les partitions se chevauchent et l'Abonné ne peut pas mettre à jour les colonnes référencées dans un filtre paramétré.Data in the partitions is overlapping, and the Subscriber cannot update columns referenced in a parameterized filter. N/AN/A Chevauchement ; refus des modifications de données hors partitionOverlapping, disallow out-of-partition data changes 11
Les données des partitions ne se chevauchent pas et les données sont partagées entre les abonnements.Data in the partitions is not overlapping, and the data is shared between subscriptions. L'Abonné ne peut pas mettre à jour les colonnes référencées dans un filtre paramétré.The Subscriber cannot update columns referenced in a parameterized filter. N/AN/A Non-chevauchement ; partage entre les abonnementsNonoverlapping, shared between subscriptions 22
Les données des partitions ne se chevauchent pas et il n'existe qu'un seul abonnement par partition.Data in the partitions is not overlapping, and there is a single subscription per partition. L’Abonné ne peut pas mettre à jour les colonnes référencées dans un filtre paramétré.The Subscriber cannot update columns referenced in a parameterized filter. Filtre paramétré créant des partitions qui ne se chevauchent pas, avec un seul abonnement par partitionA row from this table will go to only one subscription Non-chevauchement ; abonnement uniqueNonoverlapping, single subscription 33

*Si l’option de filtrage sous-jacente a la valeur 0, 1 ou2, les boîtes de dialogue Ajouter un filtre et Modifier le filtre affichent le message suivant : Une ligne de cette table ira à plusieurs abonnements.*If the underlying filtering option is set to 0, or 1, or 2, the Add Filter and Edit Filter dialog boxes will display A row from this table will go to multiple subscriptions.

** Si vous spécifiez cette option, il ne peut y avoir qu’un seul abonnement pour chaque partition de données de cet article.**If you specify this option, there can only be a single subscription for each partition of data in that article. Si un deuxième abonnement est créé dans lequel le critère de filtrage du nouvel abonnement produit la même partition que l'abonnement existant, ce dernier est supprimé.If a second subscription is created in which the filtering criterion of the new subscription resolves to the same partition as the existing subscription, the existing subscription is dropped.

Important

La valeur de partition options doit être définie en fonction du partage des données entre Abonnés.The partition options value must be set according to how data is shared by Subscribers. Si, par exemple, vous spécifiez une partition qui ne se chevauche pas avec un seul abonnement par partition mais que les données sont ensuite mises à jour sur un autre Abonné, l'Agent de fusion peut échouer au cours de la synchronisation et un problème de non convergence peut survenir.If, for example, you specify that a partition is nonoverlapping with a single subscription per partition, but data is then updated at another Subscriber, the Merge Agent can fail during synchronization and non-convergence can occur.

Sélection de l'option de partition adéquateSelecting the Appropriate Partition Option

Les partitions qui ne se chevauchent pas sont utilisées en conjonction avec les partitions précalculées pour améliorer les performances dans les cas où certaines limitations fonctionnelles sont admises.Nonoverlapping partitions work in conjunction with precomputed partitions to improve performance in situations where some functional limitations are acceptable. Les partitions précalculées accélèrent les téléchargements vers les Abonnés mais ralentissent les téléchargements à partir de ceux-ci.Precomputed partitions quicken downloads to Subscribers, but slow uploads. Les partitions qui ne se chevauchent pas réduisent les coûts de téléchargement associés aux partitions précalculées.Nonoverlapping partitions minimize the upload cost associated with precomputed partitions. Le gain de performances lié au non-chevauchement des partitions est plus flagrant lorsque les filtres paramétrés et les filtres de jointure utilisés sont plus complexes.The performance benefit of nonoverlapping partitions is more noticeable when the parameterized filters and join filters used are more complex.

Prenez les scénarios suivants en considération lorsque vous décidez de l'option de partition à utiliser dans une publication.Consider the following scenarios when deciding which partition options to use in a publication.

  • Adventure WorksAdventure Works possède une force de vente itinérante dont chaque membre est responsable de clients de la zone d'un code postal donné. has a mobile sales force with each sales person responsible for customers in a given zip code. En cas de déplacement d'un client d'un secteur de vente vers un autre, l'application exige que le code postal soit mis à jour pour que le client soit attribué à un autre commercial.The application requires that the zip code be updated if a customer moves from one sales territory to another, so that the customer is assigned to a different sales person. Le filtre paramétré est basé sur le code postal du client et la mise à jour entraîne la suppression du code postal de la partition d'un commercial et son insertion dans la partition d'un autre commercial.The parameterized filter is based on the customer's zip code, and the update removes the zip code from one sales person's partition and inserts it into another sales person's partition. Cela exige la présence de partitions qui se chevauchent avec la possibilité de mettre à jour les colonnes référencées dans un filtre paramétré.This requires overlapping partitions with the ability to update columns referenced in a parameterized filter. Cette option offre une plus grande souplesse mais peut s'avérer moins performante que les partitions qui ne se chevauchent pas.This option maximizes flexibility but might not perform as well as nonoverlapping partitions.

  • Une agence pour l'emploi possède des données qu'elle transmet à ses diverses antennes régionales.An employment agency has data that is supplied to regional offices in each county of the state. Les données ne se chevauchent pas ; chaque ligne de la table hébergée sur le serveur du siège de l'agence est incluse dans une seule partition mais cette dernière est envoyée à plusieurs antennes régionales.The data does not overlap; each row in the table at the agency's headquarters is included in only one partition, but that partition is sent to multiple offices in the same county. L'utilisation de l'option de partitions qui ne se chevauchent pas avec des partitions partagées entre les abonnements convient parfaitement, car elle offre de meilleures performances que les partitions qui se chevauchent tout en répondant aux exigences de l'application.The nonoverlapping partition option with partitions shared between subscriptions is appropriate, providing a performance improvement over overlapping partitions while satisfying the application requirements.

  • Si vous disposez de partitions qui ne se chevauchent pas et qu'un seul abonnement reçoit et met à jour les données d'une partition, les performances y gagnent encore.If you have nonoverlapping partitions and only one subscription receives and updates the data in a partition, further performance benefits can be realized. Il s'agit d'un scénario classique pour les systèmes de points de vente et les applications de force de vente dans lesquelles les données sont principalement collectées sur l'Abonné et téléchargées vers le serveur de publication.This scenario is common for point of sale systems, and field force applications in which data is primarily collected at the Subscriber and uploaded to the Publisher. Prenons l'exemple d'une table Package dans une application de livraison : au fur et à mesure du chargement des colis dans le camion, l'état des colis change dans la table Package et la modification est répliquée vers le siège de la société.Consider a Package table in a delivery application: as each package is loaded onto a truck, the status of the package is changed in the Package table, and the change is replicated back to headquarters. Les camionneurs ne mettent pas à jour l'état du même colis sur deux camions différents de sorte que la table Package est un bon exemple de partition qui ne se chevauche pas avec un seul abonnement par partition.Drivers would not update the status of the same package on two different trucks, so the Package table is a good candidate for a nonoverlapping partition with a single subscription per partition.

Considérations en matière de partitions qui ne se chevauchent pasConsiderations for Nonoverlapping Partitions

Les éléments suivants doivent être pris en compte lors de l'utilisation de partitions qui ne se chevauchent pas.Keep the following considerations in mind when using nonoverlapping partitions.

Considérations généralesGeneral Considerations
  • La publication doit utiliser des partitions précalculées.The publication must use precomputed partitions.

  • Une ligne ne doit appartenir qu'à une seule partition.A row must belong to only one partition.

  • Les articles ne peuvent pas faire partie d'un enregistrement logique.Articles cannot be part of a logical record.

  • D'autres partenaires de synchronisation ne sont pas pris en charge (cette fonctionnalité est déconseillée).Alternate synchronization partners are not supported (this feature is deprecated).

  • L'Abonné ne peut pas mettre à jour les colonnes référencées dans un filtre paramétré.The Subscriber cannot update columns referenced in a parameterized filter.

  • Si une insertion sur un Abonné n'appartient pas à la partition, elle n'est pas supprimée.If an insert at a Subscriber does not belong to the partition, it is not deleted. En revanche, elle ne sera pas répliquée vers les autres Abonnés.However, it will not be replicated to other Subscribers.

  • Dans certains cas de partitions qui se chevauchent, les plages d'identité sont modifiées lorsque l'Agent de fusion insère des données.In some circumstances with overlapping partitions, identity ranges are adjusted when the Merge Agent inserts data. Avec des partitions qui ne se chevauchent pas, les plages peuvent uniquement être modifiées au cours des insertions effectuées par un utilisateur autorisé à modifier les plages d'identité dans la base de données d'abonnement.With nonoverlapping partitions, ranges can only be adjusted during inserts by a user who has permission to adjust identity ranges in the subscription database. L'utilisateur doit être soit propriétaire de la table, soit membre du rôle serveur fixe sysadmin , du rôle de base de données fixe db_owner ou du rôle de base de données fixe db_ddladmin .The user must either own the table, or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role.

Autres considérations relatives aux partitions qui ne se chevauchent pas avec un seul abonnement par partitionAdditional Considerations for Nonoverlapping Partitions with a Single Subscription per Partition
Autres considérations sur les filtres de jointureAdditional Considerations for Join Filters
  • Dans une hiérarchie de filtres de jointure, un article avec chevauchement de partitions peut apparaître au dessus d'un article sans chevauchement de partitions.In a join filter hierarchy, an article with an overlapping partition cannot appear above an article with a nonoverlapping partition. En d'autres termes, un article parent doit utiliser des partitions qui ne se chevauchent pas si l'article enfant en possède.In other words, a parent article must use nonoverlapping partitions if the child article does. Pour plus d'informations sur les filtres de jointure, consultez Join Filters.For information about join filters, see Join Filters.

  • Un filtre de jointure dans lequel la partition sans chevauchement est un enfant doit avoir la propriété join unique key affectée de la valeur 1.A join filter in which the nonoverlapping partition is a child must have the join unique key property set to 1. Pour plus d’informations, voir Join Filters.For more information, see Join Filters.

  • L'article ne doit avoir qu'un seul filtre paramétré ou filtre de jointure.The article should only have one parameterized filter or join filter. Posséder un filtre paramétré et être le parent dans un filtre de jointure est autorisé.Having a parameterized filter and being the parent in a join filter is allowed. Posséder un filtre paramétré et être l'enfant dans un filtre de jointure n'est pas autorisé.Having a parameterized filter and being the child in a join filter is not allowed. Posséder plusieurs filtres de jointures est également interdit.Having more than one join filter is also not allowed.

  • Si deux tables d'un serveur de publication possèdent une relation de filtre de jointure et que la table enfant contient des lignes qui ne correspondent à aucune ligne de la table parent, une insertion de la ligne parente manquante n'entraîne pas le téléchargement des lignes liées vers l'Abonné (les lignes seraient téléchargées avec des partitions qui se chevauchent).If two tables at the Publisher have a join filter relationship and the child table has rows that have no corresponding row in the parent table, an insert of the missing parent row will not result in the related rows being downloaded to the Subscriber (the rows would be downloaded with overlapping partitions). Si, par exemple, la table SalesOrderDetail comprend des lignes sans correspondance dans la table SalesOrderHeader et que vous insérez la ligne manquante dans SalesOrderHeader, la ligne est téléchargée sur l'Abonné mais les lignes correspondantes de la table SalesOrderDetail ne le sont pas.For example, if the SalesOrderDetail table has rows with no corresponding row in the SalesOrderHeader table, and you insert the missing row in SalesOrderHeader, the row is downloaded to the Subscriber, but the corresponding rows in SalesOrderDetail are not.

Voir aussiSee Also

Bonnes pratiques concernant les filtres de lignes basés sur le temps Best Practices for Time-Based Row Filters
Filtrer des données publiées Filter Published Data
Filtrer des données publiées en vue de la réplication de fusion Filter Published Data for Merge Replication