Filtros con parámetros: filtros de fila con parámetrosParameterized Filters - Parameterized Row Filters

Los filtros de filas con parámetros permiten enviar diferentes particiones de datos a diferentes suscriptores sin necesidad de crear varias publicaciones (los filtros con parámetros se denominaban filtros dinámicos en versiones anteriores 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). Una partición es un subconjunto de filas de una tabla; dependiendo de la configuración elegida al crear un filtro de filas con parámetros, cada fila de una tabla publicada puede pertenecer a una sola partición (lo que produce particiones no superpuestas) o a dos o más particiones (lo que produce particiones superpuestas).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).

Las particiones no superpuestas se pueden compartir entre varias suscripciones o restringirse de forma que solo una suscripción reciba una partición determinada.Nonoverlapping partitions can be shared among subscriptions or they can be restricted so that only one subscription receives a given partition. La configuración que controla el comportamiento de la partición se describe en "Usar las opciones de filtrado apropiadas" más adelante en este tema.The settings that control partition behavior are described in "Using the Appropriate Filtering Options" later in this topic. Con esta configuración, puede adaptar los filtros con parámetros a los requisitos de rendimiento y de la aplicación.Using these settings you can tailor parameterized filtering according to application and performance requirements. En general, las particiones superpuestas proporcionan un mayor grado de flexibilidad, mientras que las particiones no superpuestas replicadas en una sola suscripción proporcionan un mejor rendimiento.In general, overlapping partitions allow for greater flexibility, and nonoverlapping partitions replicated to a single subscription provide better performance.

Los filtros con parámetros se utilizan en una sola tabla y generalmente se combinan con filtros de combinación para extender el filtrado a las tablas relacionadas.Parameterized filters are used on a single table and are typically combined with join filters to extend filtering to related tables. Para más información, vea Join Filters.For more information, see Join Filters.

Para definir o modificar un filtro de fila con parámetros, vea Definir y modificar un filtro de fila con parámetros para un artículo de mezcla.To define or modify a parameterized row filter, see Define and Modify a Parameterized Row Filter for a Merge Article.

Cómo funcionan los filtros con parámetrosHow Parameterized Filters Work

Un filtro de fila con parámetros utiliza una cláusula WHERE para seleccionar los datos apropiados para publicar.A parameterized row filter uses a WHERE clause to select the appropriate data to be published. En vez de especificar un valor literal en la cláusula (como ocurre con un filtro de fila estático), se especifica una o las dos funciones del sistema siguientes: SUSER_SNAME() y 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(). También se pueden utilizar funciones definidas por el usuario, pero deben incluir SUSER_SNAME() o HOST_NAME() en el cuerpo de la función, o evaluar una de estas funciones del sistema (como 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 una función definida por el usuario incluye SUSER_SNAME() o HOST_NAME() en el cuerpo de la función, no se pueden pasar parámetros a la función.If a user-defined function includes SUSER_SNAME() or HOST_NAME() in the body of the function, you cannot pass parameters to the function.

Las funciones del sistema SUSER_SNAME() y HOST_NAME() no son específicas para la replicación de mezcla, pero la replicación de mezcla las utiliza para el filtrado con parámetros: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() devuelve información de inicio de sesión para las conexiones establecidas con una instancia de SQL ServerSQL Server.SUSER_SNAME() returns login information for connections made to an instance of SQL ServerSQL Server. Cuando se utiliza en un filtro con parámetros, devuelve el inicio de sesión que utiliza el Agente de mezcla para conectarse al publicador (el inicio de sesión se especifica al crear una suscripción).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() devuelve el nombre del equipo que se está conectando a una instancia de SQL ServerSQL Server.HOST_NAME() returns the name of the computer that is connecting to an instance of SQL ServerSQL Server. Cuando se utiliza en un filtro con parámetros, devuelve de manera predeterminada el nombre del equipo en el que se está ejecutando el Agente de mezcla.When used in a parameterized filter, by default it returns the name of the computer on which the Merge Agent is running. Para las suscripciones de extracción, es el nombre del suscriptor, y para las suscripciones de inserción, es el nombre del distribuidor.For pull subscriptions it is the name of the Subscriber; for push subscriptions it is the name of the Distributor.

    También es posible anular esta función con un valor distinto del nombre del suscriptor o el distribuidor.It is also possible to override this function with a value other than the name of the Subscriber or Distributor. Generalmente, las aplicaciones invalidan esta función con valores más significativos, como el nombre o el indentificador de un vendedor.Typically applications override this function with more meaningful values, such as a salesperson name or salesperson ID. Para obtener más información, vea la sección "Invalidar el valor de HOST_NAME_NAME()" en este mismo tema.For more information, see the section "Overriding the HOST_NAME() Value" in this topic.

    El valor que devuelve la función del sistema se compara con la columna especificada en la tabla que está filtrando y se descargan los datos apropiados al suscriptor.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. Esta comparación se lleva a cabo al inicializar la suscripción (para que la instantánea inicial contenga únicamente los datos correctos) y cada vez que se sincroniza la suscripción.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. De manera predeterminada, si un cambio en el publicador hace que se mueva una fila fuera de una partición, esta fila se elimina en el suscriptor (este comportamiento se controla con el parámetro @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)).

Nota

Cuando se realizan comparaciones para los filtros con parámetros, se utiliza siempre la intercalación de base de datos.When comparisons are made for parameterized filters, the database collation is always used. Por ejemplo, si la intercalación de base de datos no distingue entre mayúsculas y minúsculas, pero la intercalación de tabla o columna sí lo hace, la comparación no distinguirá entre mayúsculas y minúsculas.For example, if the database collation is case insensitive, but the table or column collation is case sensitive, the comparison will be case insensitive.

Filtrar con SUSER_SNAME()Filtering with SUSER_SNAME()

Considere la tabla Employee en la base de datos de ejemplo Adventure WorksAdventure Works .Consider the Employee Table in the Adventure WorksAdventure Works sample database. Esta tabla incluye la columna LoginID, que contiene el inicio de sesión de cada empleado en la forma 'dominio\inicioDeSesión'.This table includes the column LoginID, which contains the login for each employee in the form 'domain\login'. Para filtrar esta tabla con el fin de que los empleados reciban únicamente los datos relacionados con ellos, especifique la cláusula de filtro:To filter this table so that employees receive only the data related to them, specify a filter clause of:

LoginID = SUSER_SNAME()  

Por ejemplo, el valor para uno de los empleados es 'adventure-works\john5'.For example, the value for one of the employees is 'adventure-works\john5'. Cuando el Agente de mezcla se conecta al publicador, utiliza el nombre de inicio de sesión especificado al crear la suscripción (en este caso, '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'). A continuación, el Agente de mezcla compara el valor devuelto por SUSER_SNAME() con los valores de la tabla y descarga únicamente la fila que contiene el valor 'adventure-works\john5' en la columna 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.

Filtrar con HOST_NAME()Filtering with HOST_NAME()

Considere la tabla HumanResources.Employee .Consider the HumanResources.Employee table. Suponga que esta tabla contiene una columna ComputerName con el nombre del equipo de cada empleado en formato 'nombre_tipoDeEquipo'.Suppose this table contained a column such as ComputerName with the name of each employee's computer in the form 'name_computertype'. Para filtrar esta tabla con el fin de que los empleados reciban únicamente los datos relacionados con ellos, especifique la cláusula de filtro:To filter this table so that employees receive only the data related to them, specify a filter clause of:

ComputerName = HOST_NAME()  

Por ejemplo, el valor de uno de los empleados podría ser 'john5_laptop'.For example, the value for one of the employees could be 'john5_laptop'. Cuando el Agente de mezcla se conecta al publicador, compara el valor devuelto por HOST_NAME() con los valores de la tabla y descarga únicamente la fila que contiene el valor 'john5_laptop' en la columna 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.

También puede combinar las funciones en un filtro.It is also possible to combine the functions in a filter. Por ejemplo, si desea asegurarse de que un empleado reciba datos solamente cuando utilice su nombre de inicio de sesión en su equipo, la cláusula de filtro podría ser: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()  

A menos que vaya a reemplazar el valor de HOST_NAME(), el filtrado con HOST_NAME() solamente se suele utilizar con suscripciones de extracción.Unless you are overriding the HOST_NAME() value, filtering with HOST_NAME() is typically used only with pull subscriptions. El valor que devuelve la función es el nombre del equipo en el que se está ejecutando el Agente de mezcla.The value returned by the function is the name of the computer on which the Merge Agent is running. Para las suscripciones de extracción, el valor es diferente para cada suscripción, pero para las suscripciones de inserción, el valor es el mismo (todos los agentes de mezcla se ejecutan en el distribuidor para las suscripciones de inserción).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).

Importante

El valor de la función HOST_NAME() se puede reemplazar; por lo tanto, no es posible utilizar filtros que incluyan HOST_NAME() para controlar el acceso a particiones de datos.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. Para controlar el acceso a particiones de datos, utilice SUSER_SNAME(), SUSER_SNAME() en combinación con HOST_NAME(), o utilice filtros de fila estáticos.To control access to partitions of data, use SUSER_SNAME(), SUSER_SNAME() in combination with HOST_NAME(), or use static row filters.

Reemplazar el valor de HOST_NAME()Overriding the HOST_NAME() Value

Como se indicó anteriormente, HOST_NAME() devuelve, de manera predeterminada, el nombre del equipo que se está conectando a una instancia 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. Cuando se utilizan filtros con parámetros, es frecuente reemplazar este valor con otro suministrado al crear una suscripción.When using parameterized filters, it is common to override this value by supplying a value when you create a subscription. A continuación, la función HOST_NAME() devuelve el valor que se ha especificado en vez del nombre del equipo.The HOST_NAME() function then returns the value you specify rather than the name of the computer.

Nota

Si reemplaza HOST_NAME(), todas las llamadas a la función HOST_NAME() devolverán el valor especificado.If you override HOST_NAME(), all calls to the HOST_NAME() function will return the value you specify. Asegúrese de que otras aplicaciones no dependen de HOST_NAME() al devolver el nombre del equipo.Ensure that other applications are not depending on HOST_NAME() returning the computer name.

Considere la tabla HumanResources.Employee .Consider the HumanResources.Employee table. Esta tabla incluye la columna EmployeeID.This table includes the column EmployeeID. Para filtrar esta tabla con el fin de que cada empleado reciba únicamente los datos relacionados con él, especifique la cláusula de filtro: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())

Por ejemplo, a la empleada Pamela Ansman-Wolfe se le ha asignado el identificador 280.For example, employee Pamela Ansman-Wolfe has been assigned an employee ID of 280. Especifique el valor de identificador de empleado (280 en este ejemplo) como valor de HOST_NAME() al crear una suscripción para esta empleada.Specify the value of the employee ID (280 in our example) for the HOST_NAME() value when creating a subscription for this employee. Cuando el Agente de mezcla se conecte al publicador, comparará el valor devuelto por HOST_NAME() con los valores de la tabla y descargará únicamente la fila que contiene el valor 280 en la columna 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.

Importante

La función HOST_NAME() devuelve un valor nchar , por lo que debe usar CONVERT si la columna de la cláusula del filtro es de tipo de datos numérico, como en el ejemplo anterior.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. Por motivos de rendimiento, se recomienda no aplicar funciones a los nombres de columna en las cláusulas de los filtros de fila con parámetros, como 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 su lugar, se recomienda usar el método que se muestra en el ejemplo: EmployeeID = CONVERT(int,HOST_NAME()).Instead, we recommend using the approach shown in the example: EmployeeID = CONVERT(int,HOST_NAME()). Esta cláusula puede usare para el parámetro @subset_filterclause de sp_addmergearticle, pero generalmente no se puede usar en el Asistente para nueva publicación (el asistente ejecuta la cláusula del filtro para validarlo, pero no lo logra porque el nombre del equipo no se puede convertir a 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 usa el Asistente para nueva publicación, se recomienda especificar CONVERT(nchar,EmployeeID) = HOST_NAME() en el asistente y, a continuación, usar sp_changemergearticle para cambiar la cláusula a EmployeeID = CONVERT(int,HOST_NAME()) antes de crear una instantánea de la publicación.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.

Para reemplazar el valor de HOST_NAME()To override the HOST_NAME() value

Utilice uno de los métodos siguientes para reemplazar el valor de HOST_NAME():Use one of the following methods to override the HOST_NAME() value:

Inicializar una suscripción a una publicación con filtros con parámetrosInitializing a Subscription to a Publication with Parameterized Filters

Cuando se utilizan filtros de fila con parámetros en las publicaciones de combinación, la replicación inicializa cada suscripción con una instantánea en dos partes.When parameterized row filters are used in merge publications, replication initializes each subscription with a two-part snapshot. Para más información, consulte Snapshots for Merge Publications with Parameterized Filters.For more information, see Snapshots for Merge Publications with Parameterized Filters.

Usar las opciones de filtrado apropiadasUsing the Appropriate Filtering Options

Hay dos áreas clave que puede controlar cuando se utilizan filtros con parámetros:There are two key areas over which you have control when using parameterized filters:

  • Cómo procesa los filtros la replicación de mezcla, que se controla con una de las dos opciones de publicación siguientes: use partition groups y 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.

  • Cómo se comparten los datos entre los suscriptores, que debe reflejarse en la opción de artículo partition options(opciones de partición).How the data is shared among Subscribers, which must be reflected by the article setting partition options.

    Para establecer opciones de filtrado, vea Optimize Parameterized Row Filters.To set filtering options, see Optimize Parameterized Row Filters.

Configurar 'use partition groups' y 'keep partition changes'Setting 'use partition groups' and 'keep partition changes'

Las opciones use partition groups y keep partition changes mejoran el rendimiento de la sincronización para las publicaciones con artículos filtrados, ya que almacenan metadatos adicionales en la base de datos de publicaciones.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. La opción use partition groups proporciona una mayor mejora en el rendimiento mediante la característica de particiones precalculadas.The use partition groups option provides greater performance improvement through the use of the precomputed partitions feature. Esta opción se establece de manera predeterminada en true si los artículos de la publicación cumplen una serie de requisitos.This option is set to true by default if the articles in your publication adhere to a set of requirements. Para obtener más información sobre estos requisitos, vea Optimizar el rendimiento de los filtros con parámetros con particiones calculadas previamente.For more information about these requirements, see Optimize Parameterized Filter Performance with Precomputed Partitions. Si los artículos no cumplen los requisitos para usar particiones precalculadas, se establecerá la opción keep partition changes en true.If your articles do not meet the requirements for using precomputed partitions, the keep partition changes option to is set to true.

Configurar 'partition options'Setting 'partition options'

Al crear un artículo, se especifica un valor para la propiedad partition options , en función de cómo van a compartir los suscriptores los datos de la tabla filtrada.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. Es posible asignar a la propiedad uno de cuatro valores usando sp_addmergearticle, sp_changemergearticley el cuadro de diálogo Propiedades del artículo .The property can be set to one of four values using sp_addmergearticle, sp_changemergearticle, and the Article Properties dialog box. La propiedad se puede establecer en uno de dos valores en los cuadros de diálogo Agregar filtro o Editar filtro , disponibles desde el Asistente para nueva publicación y el cuadro de diálogo Propiedades de la publicación .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. La tabla siguiente resume los valores disponibles:The following table summarizes the available values:

DescripciónDescription Valor en Agregar filtro y Editar filtroValue in Add Filter and Edit Filter Valor en Propiedades del artículoValue in Article Properties Valor en procedimientos almacenadosValue in stored procedures
Los datos de las particiones se superponen y el suscriptor puede actualizar las columnas a las que se hace referencia en un filtro con parámetros.Data in the partitions is overlapping, and the Subscriber can update columns referenced in a parameterized filter. Una fila de esta tabla irá a varias suscripcionesA row from this table will go to multiple subscriptions SuperpuestasOverlapping 00
Los datos de las particiones se superponen y el suscriptor no puede actualizar las columnas a las que se hace referencia en un filtro con parámetros.Data in the partitions is overlapping, and the Subscriber cannot update columns referenced in a parameterized filter. N/AN/A Superpuestas, no permitir cambios de datos fuera de la particiónOverlapping, disallow out-of-partition data changes 11
Los datos de las particiones no se superponen y los datos se comparten entre las suscripciones.Data in the partitions is not overlapping, and the data is shared between subscriptions. El suscriptor no puede actualizar columnas a las que se hace referencia en un filtro con parámetros.The Subscriber cannot update columns referenced in a parameterized filter. N/AN/A No superpuestas, compartir entre suscripcionesNonoverlapping, shared between subscriptions 22
Los datos de las particiones no se superponen y hay una sola suscripción por partición.Data in the partitions is not overlapping, and there is a single subscription per partition. El suscriptor no puede actualizar columnas a las que se hace referencia en un filtro parametrizado.The Subscriber cannot update columns referenced in a parameterized filter. Una fila de esta tabla irá a una sola suscripciónA row from this table will go to only one subscription No superpuestas, una sola suscripciónNonoverlapping, single subscription 33

*Si la opción de filtrado subyacente se establece en 0 o 1 o 2, los cuadros de diálogo Agregar filtro y Editar filtro mostrarán Una fila de esta tabla irá a varias suscripciones.*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 especifica esta opción, solo podrá haber una suscripción para cada partición de datos de ese artículo.If you specify this option, there can only be a single subscription for each partition of data in that article. Si se crea una segunda partición en la que el criterio de filtrado de la nueva suscripción se resuelve en la misma partición que la suscripción existente, se quitará la suscripción existente.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.

Importante

El valor de partition options debe establecerse en función de cómo comparten los datos los suscriptores.The partition options value must be set according to how data is shared by Subscribers. Por ejemplo, si especifica una partición sin superposición con una sola suscripción por partición, pero después actualiza los datos en otro suscriptor, se puede producir un error en el Agente de mezcla durante la sincronización y dar lugar a una falta de convergencia.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.

Seleccionar la opción de partición apropiadaSelecting the Appropriate Partition Option

Las particiones no superpuestas funcionan en combinación con las particiones precalculadas para mejorar el rendimiento en situaciones en las que se admiten algunas limitaciones funcionales.Nonoverlapping partitions work in conjunction with precomputed partitions to improve performance in situations where some functional limitations are acceptable. Las particiones precalculadas aceleran la descarga de datos para los suscriptores, pero hacen más lenta la carga.Precomputed partitions quicken downloads to Subscribers, but slow uploads. Las particiones no superpuestas minimizan el costo de carga asociado a las particiones precalculadas.Nonoverlapping partitions minimize the upload cost associated with precomputed partitions. La ventaja en el rendimiento de las particiones no superpuestas es más evidente cuando los filtros con parámetros y de combinación utilizados son más complejos.The performance benefit of nonoverlapping partitions is more noticeable when the parameterized filters and join filters used are more complex.

Tenga en cuenta los siguientes escenarios al decidir qué opciones de partición debe utilizar en una publicación.Consider the following scenarios when deciding which partition options to use in a publication.

  • Adventure WorksAdventure Works tiene un equipo de ventas móvil en el que cada vendedor es responsable de los clientes de un código postal determinado. has a mobile sales force with each sales person responsible for customers in a given zip code. La aplicación requiere que se actualice el código postal si un cliente se traslada de un área de ventas a otra, para poder asignar el cliente a otro vendedor.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. El filtro con parámetros se basa en el código postal del cliente, y la actualización quita el código postal de la partición de un vendedor y lo inserta en la partición de otro vendedor.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. Para esto, se requieren particiones superpuestas y la capacidad de actualizar columnas a las que se hace referencia en un filtro con parámetros.This requires overlapping partitions with the ability to update columns referenced in a parameterized filter. Esta opción proporciona la máxima flexibilidad, pero es posible que no funcione tan bien con particiones no superpuestas.This option maximizes flexibility but might not perform as well as nonoverlapping partitions.

  • Una agencia de empleo suministra datos a las oficinas regionales de cada condado del estado.An employment agency has data that is supplied to regional offices in each county of the state. Los datos no se superponen; cada fila de la tabla de la oficina principal de la agencia está incluida en una sola partición, pero esa partición se envía a varias oficinas del mismo condado.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. Es apropiado utilizar la opción de particiones no superpuestas con las particiones compartidas entre suscripciones, lo que proporciona una mejora en el rendimiento en comparación con las particiones superpuestas, a la vez que satisface los requisitos de la aplicación.The nonoverlapping partition option with partitions shared between subscriptions is appropriate, providing a performance improvement over overlapping partitions while satisfying the application requirements.

  • Si tiene particiones no superpuestas y solo una suscripción recibe y actualiza los datos de una partición, puede obtener ventajas adicionales en el rendimiento.If you have nonoverlapping partitions and only one subscription receives and updates the data in a partition, further performance benefits can be realized. Este escenario es común para los sistemas de punto de venta y las aplicaciones de personal de campo en las que los datos se recopilan principalmente en el suscriptor y se cargan en el publicador.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. Considere una tabla Package en una aplicación de entrega: a medida que se cargan los paquetes en un camión, el estado de cada paquete cambia en la tabla Package , y el cambio se replica en la oficina principal.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. Los conductores no actualizan el estado del mismo paquete en dos camiones distintos, por lo que la tabla Package es un buen candidato para una partición no superpuesta con una sola suscripción por partición.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.

Consideraciones para particiones no superpuestasConsiderations for Nonoverlapping Partitions

Tenga en cuenta las consideraciones siguientes al utilizar particiones no superpuestas:Keep the following considerations in mind when using nonoverlapping partitions.

Consideraciones generalesGeneral Considerations
  • La publicación debe utilizar particiones precalculadas.The publication must use precomputed partitions.

  • Una fila debe pertenecer a una sola partición.A row must belong to only one partition.

  • Los artículos no pueden formar parte de un registro lógico.Articles cannot be part of a logical record.

  • No se admiten otros asociados de sincronización (esta característica ha quedado desusada).Alternate synchronization partners are not supported (this feature is deprecated).

  • El suscriptor no puede actualizar columnas a las que se hace referencia en un filtro con parámetros.The Subscriber cannot update columns referenced in a parameterized filter.

  • Si una inserción en un suscriptor no pertenece a la partición, no se eliminará.If an insert at a Subscriber does not belong to the partition, it is not deleted. Sin embargo, tampoco se replicará en otros suscriptores.However, it will not be replicated to other Subscribers.

  • En algunas circunstancias con particiones superpuestas, los intervalos de identidad se ajustan cuando el Agente de mezcla inserta datos.In some circumstances with overlapping partitions, identity ranges are adjusted when the Merge Agent inserts data. Con las particiones no superpuestas, los intervalos solo se pueden ajustar durante las inserciones realizadas por un usuario con permisos para ajustar intervalos de identidad en la base de datos de suscripciones.With nonoverlapping partitions, ranges can only be adjusted during inserts by a user who has permission to adjust identity ranges in the subscription database. El usuario debe ser el propietario de la tabla o debe ser miembro del rol fijo de servidor sysadmin , del rol fijo de base de datos db_owner o del rol fijo de base de datos 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.

Otras consideraciones para las particiones no superpuestas con una sola suscripción por particiónAdditional Considerations for Nonoverlapping Partitions with a Single Subscription per Partition
Otras consideraciones para los filtros de combinaciónAdditional Considerations for Join Filters
  • En una jerarquía de filtros de combinación, un artículo con una partición superpuesta no puede aparecer por encima de un artículo con una partición no superpuesta.In a join filter hierarchy, an article with an overlapping partition cannot appear above an article with a nonoverlapping partition. Es decir, un artículo primario debe usar particiones no superpuestas si las utiliza el artículo secundario.In other words, a parent article must use nonoverlapping partitions if the child article does. Para obtener información acerca de los filtros de combinación, vea Join Filters.For information about join filters, see Join Filters.

  • Un filtro de combinación en el que la partición no superpuesta es un proceso secundario debe tener la propiedad join unique key establecida en 1.A join filter in which the nonoverlapping partition is a child must have the join unique key property set to 1. Para más información, vea Join Filters.For more information, see Join Filters.

  • El artículo solamente debe tener un filtro con parámetros o un filtro de combinación.The article should only have one parameterized filter or join filter. Se admite tener un filtro con parámetros y ser el proceso primario en un filtro de combinación.Having a parameterized filter and being the parent in a join filter is allowed. No se permite tener un filtro con parámetros y ser el proceso secundario en un filtro de combinación.Having a parameterized filter and being the child in a join filter is not allowed. Tampoco se permite tener más de un filtro de combinación.Having more than one join filter is also not allowed.

  • Si dos tablas del publicador tienen una relación de filtro de combinación y la tabla secundaria tiene filas que no tienen una fila correspondiente en la tabla primaria, la inserción de la fila que falta en la tabla primaria no hará que las filas relacionadas se descarguen al suscriptor (las filas se descargarían con particiones superpuestas).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). Por ejemplo, si la tabla SalesOrderDetail tiene filas sin una fila correspondiente en la tabla SalesOrderHeader , e inserta la fila que falta en SalesOrderHeader, la fila se descargará en el suscriptor, pero las filas correspondientes en SalesOrderDetail no lo harán.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.

Vea tambiénSee Also

Prácticas recomendadas para filtros de fila basados en el tiempo Best Practices for Time-Based Row Filters
Filtrar datos publicados Filter Published Data
Filtrar datos publicados para la replicación de mezcla Filter Published Data for Merge Replication