Filtrar datos publicadosFilter Published Data

Filtrar artículos de tabla permite crear particiones de los datos que se van a publicar.Filtering table articles enables you to create partitions of data to be published. Si filtra los datos publicados, podrá:By filtering published data, you can:

  • Minimizar la cantidad de datos que se envían a través de la red.Minimize the amount of data sent over the network.

  • Reducir la cantidad de espacio de almacenamiento necesario en el suscriptor.Reduce the amount of storage space required at the Subscriber.

  • Personalizar las publicaciones y las aplicaciones en función de los requisitos de cada suscriptor.Customize publications and applications based on individual Subscriber requirements.

  • Evitar o reducir los conflictos si los suscriptores actualizan datos, ya que pueden enviarse particiones de datos diferentes a varios suscriptores (dos suscriptores distintos no actualizarán los mismos valores de datos).Avoid or reduce conflicts if Subscribers are updating data, because different data partitions can be sent to different Subscribers (no two Subscribers will be updating the same data values).

  • Evitar la transmisión de datos reservados.Avoid transmitting sensitive data. Se pueden utilizar filtros de fila y filtros de columna para restringir el acceso de un suscriptor a los datos.Row filters and column filters can be used to restrict a Subscriber's access to data. Para la replicación de mezcla, existen consideraciones de seguridad que se deben tener en cuenta si utiliza un filtro con parámetros que incluya HOST_NAME().For merge replication, there are security considerations if you use a parameterized filter that includes HOST_NAME(). Para obtener más información, vea la sección sobre cómo filtrar con HOST_NAME() en el tema Parameterized Row Filters.For more information, see the section "Filtering with HOST_NAME()" in Parameterized Row Filters.

    La replicación ofrece cuatro tipos de filtros:Replication offers four types of filters:

  • Filtros de fila estáticos que están disponibles con todos los tipos de replicación.Static row filters, which are available with all types of replication.

    Mediante los filtros de fila estáticos, puede elegir un subconjunto de filas para publicarlo.Using static row filters, you can choose a subset of rows to be published. Todos los suscriptores de una publicación filtrada reciben el mismo subconjunto de filas para la tabla filtrada.All Subscribers to a filtered publication receive the same subset of rows for the filtered table. Para obtener más información, vea la sección "Filtros de fila estáticos" de este tema.For more information, see the section "Static Row Filters" in this topic.

  • Filtros de columna que están disponibles con todos los tipos de replicación.Column filters, which are available with all types of replication.

    Al utilizar los filtros de columna, puede elegir un subconjunto de columnas para publicarlo.Using column filters, you can choose a subset of columns to be published. Para obtener más información, vea la sección "Filtros de columna" de este tema.For more information, see the section "Column Filters" in this topic.

  • Filtros de fila con parámetros que están disponibles solamente con la replicación de mezcla.Parameterized row filters, which are available only with merge replication.

    Al utilizar los filtros de fila con parámetros, puede elegir un subconjunto de filas para publicarlo.Using parameterized row filters, you can choose a subset of rows to be published. A diferencia de los filtros estáticos que envían el mismo subconjunto de filas a cada suscriptor, los filtros de fila con parámetros utilizan un valor de datos suministrado por el suscriptor para enviar a los suscriptores diferentes subconjuntos de filas.Unlike static filters that send the same subset of rows to every Subscriber, parameterized row filters use a data value supplied by the Subscriber to send Subscribers different subsets of rows. Para más información, consulte Parameterized Row Filters.For more information, see Parameterized Row Filters.

  • Filtros de combinación que están disponibles solamente con la replicación de mezcla.Join filters, which are available only with merge replication.

    Al utilizar los filtros de combinación, puede ampliar un filtro de fila de una tabla publicada a otra.Using join filters, you can extend a row filter from one published table to another. Para más información, consulte Join Filters.For more information, see Join Filters.

filtros de fila estáticosStatic Row Filters

En la siguiente ilustración se muestra una tabla publicada que está filtrada para que solamente se incluyan las filas 2, 3 y 6 en la publicación.The following illustration shows a published table that is filtered so that only rows 2, 3, and 6 are included in the publication.

Filtrado de filasRow filtering

Un filtro de fila estático utiliza una sola cláusula WHERE para seleccionar los datos apropiados que se publicarán; se especifica la parte final de la cláusula WHERE.A static row filter uses a WHERE clause to select the appropriate data to be published; you specify the final part of the WHERE clause. Considere la tabla Product en la base de datos de ejemplo AdventureWorks, que contiene la columna ProductLine.Consider the Product Table in the Adventure Works sample database, which contains the column ProductLine. Para publicar solamente las filas con datos sobre los productos relacionados con las bicicletas de montaña, especifique ProductLine = 'M'.To publish only the rows with data on products related to mountain bikes, specify ProductLine = 'M'.

Un filtro de fila estático produce un único conjunto de datos para cada publicación.A static row filter results in a single set of data for each publication. En el ejemplo anterior, todos los suscriptores recibirían únicamente las filas con datos sobre productos relacionados con las bicicletas de montaña.In the previous example, all Subscribers would receive only the rows with data on products related to mountain bikes. Si tiene otro suscriptor que solamente requiera las filas con los datos sobre productos relacionados con bicicletas de paseo:If you have another Subscriber that requires only the rows with data on products related to road bikes:

  • Con la replicación de instantáneas o la replicación transaccional, puede crear otra publicación e incluir la tabla en ambas publicaciones (en la cláusula del filtro para el artículo de dicha publicación, especifique ProductLine = 'R')).With snapshot or transactional replication, you can create another publication and include the table in both publications (in the filter clause for the article in that publication, specify ProductLine = 'R').

    Nota

    Los filtros de fila en las publicaciones transaccionales pueden producir una sobrecarga significativa porque la cláusula de filtro de artículos se evalúa para cada fila de registro escrita en una tabla publicada para determinar si la fila se debe replicar.Row filters in transactional publications can add significant overhead because the article filter clause is evaluated for each log row written for a published table, to determine whether the row should be replicated. Se deben evitar los filtros de fila en publicaciones transaccionales si cada nodo de replicación puede admitir la carga de datos completa y el conjunto de datos global es suficientemente pequeño.Row filters in transactional publications should be avoided if each replication node can support the full data load, and the overall data set is reasonably small.

  • Con la replicación de mezcla, utilice filtros de fila con parámetros en vez de crear varias publicaciones con filtros de fila estáticos.With merge replication, use parameterized row filters rather than creating multiple publications with static row filters. Para más información, consulte Parameterized Row Filters.For more information, see Parameterized Row Filters.

    Para definir o modificar un filtro de fila estático, vea Define and Modify a Static Row Filter.To define or modify a static row filter, see Define and Modify a Static Row Filter.

Filtros de columnasColumn Filters

En la siguiente ilustración se muestra una publicación que filtra la columna C.The following illustration shows a publication that filters out column C.

Filtrado de columnasColumn filtering

También puede utilizar conjuntamente el filtrado de filas y columnas, como se ilustra a continuación.You can also use row and column filtering together, as illustrated here.

Filtrado de filas y columnasRow and column filtering

Tras crear una publicación, puede utilizar un filtro de columna para quitar una columna de una publicación existente, pero conservar la columna en la tabla en el publicador e incluir también una columna existente en la publicación.After a publication is created, you can use column filtering to drop a column from an existing publication, but retain the column in the table at the Publisher, and also to include an existing column in the publication. Para otros cambios, tales como agregar una columna nueva a una tabla y después agregarla al artículo publicado, utilice la replicación de cambios de esquema.For other changes, such as adding a new column to a table and then adding it to the published article, use schema change replication. Para más información, vea las secciones “Agregar columnas” y “Quitar columnas” del tema Realizar cambios de esquema en bases de datos de publicaciones.For more information, see the "Adding Columns" and "Dropping Columns" sections in the topic Make Schema Changes on Publication Databases.

Los tipos de columnas enumerados en la siguiente tabla no se pueden eliminar de ciertos tipos de publicaciones.The types of columns listed in the following table cannot be filtered out of certain types of publications.

Tipo de columnaColumn type Tipo de publicación y opcionesType of publication and options
Columna de clave principalPrimary key column Las columnas de clave principal son necesarias para todas las tablas en las publicaciones transaccionales.Primary key columns are required for all tables in transactional publications. Las claves principales no son necesarias para las tablas en publicaciones de combinación, pero si hay una columna de clave principal, ésta no se puede filtrar.Primary keys are not required for tables in merge publications, but if a primary key column is present, it cannot be filtered.
Columna de clave externaForeign key column Todas las publicaciones creadas mediante el Asistente para nueva aplicación.All publications created using the New Publication wizard. Puede filtrar columnas de clave externa mediante procedimientos almacenados de Transact-SQL.You can filter foreign key columns using Transact-SQL stored procedures. Para obtener más información, vea Define and Modify a Column Filter.For more information, Define and Modify a Column Filter.
Columna rowguidThe rowguid column Publicaciones de combinaciónMerge publications
Columna msrepl_tran_versionThe msrepl_tran_version column Publicaciones de instantáneas o transaccionales que permiten suscripciones actualizablesSnapshot or transactional publications that allow updatable subscriptions
Columnas que no permiten valores NULL y no tienen valores predeterminados ni el conjunto de propiedades IDENTITY.Columns that do not allow NULL and do not have default values or the IDENTITY property set. Publicaciones de instantáneas o transaccionales que permiten suscripciones actualizablesSnapshot or transactional publications that allow updatable subscriptions
Columnas con restricciones UNIQUE o índicesColumns with unique constraints or indexes Publicaciones de instantáneas o transaccionales que permiten suscripciones actualizablesSnapshot or transactional publications that allow updatable subscriptions
Todas las columnas en una publicación de combinación de SQL Server 7.0All columns in a SQL Server 7.0 merge publication Las columnas no se pueden filtrar en las publicaciones de combinación de SQL Server 7.0.Columns cannot be filtered in SQL Server 7.0 merge publications.
TimestampTimestamp Publicaciones de instantáneas o transaccionales de SQL Server 7.0 que permiten suscripciones actualizablesSQL Server 7.0 snapshot or transactional publications that allow updatable subscriptions

*Si va a publicar una tabla en una publicación de mezcla y dicha tabla ya contiene una columna del tipo de datos uniqueidentifier con el conjunto de propiedades ROWGUIDCOL, la replicación puede utilizar dicha columna, en vez de crear una columna adicional denominada rowguid.*If you are publishing a table in a merge publication and that table already contains a column of data type uniqueidentifier with the ROWGUIDCOL property set, replication can use this column instead of creating an additional column named rowguid. En este caso, se debe publicar la columna existente.In this case, the existing column must be published.

Para definir o modificar un filtro de columna, vea Define and Modify a Column Filter.To define or modify a column filter, see Define and Modify a Column Filter.

Consideraciones de filtradoFiltering Considerations

Tenga en cuenta las siguientes consideraciones al filtrar datos:Keep the following considerations in mind when filtering data:

  • Todas las columnas a las que se hace referencia en filtros de fila se deben incluir en la publicación.All columns referenced in row filters must be included in the publication. Es decir, no puede utilizar un filtro de columna para excluir una columna utilizada en un filtro de fila.In other words, you cannot use a column filter to exclude a column that is used in a row filter.

  • Si se agrega o cambia un filtro después de que se hayan inicializado las suscripciones, éstas deben reinicializarse.If a filter is added or changed after subscriptions have been initialized, the subscriptions must be reinitialized.

  • El número máximo de bytes permitido en una columna utilizada en un filtro es de 1024 para un artículo en una publicación de combinación y 8000 en un artículo de una publicación transaccional.The maximum number of bytes allowed for a column used in a filter is 1024 for an article in a merge publication and 8000 for an article in a transactional publication.

  • En filtros de fila o filtros de combinación no se puede hacer referencia a columnas con los siguientes tipos de datos:Columns with the following data types cannot be referenced in row filters or join filters:

    • varchar(max) y nvarchar(max)varchar(max) and nvarchar(max)

    • varbinary(max)varbinary(max)

    • text y ntexttext and ntext

    • imagenimage

    • XMLXML

    • UDTUDT

  • La replicación transaccional le permite replicar una vista indizada como vista o como tabla.Transactional replication allows you to replicate an indexed view as a view or as a table. Si replica la vista como tabla, no podrá filtrar columnas de la tabla.If you replicate the view as a table, you cannot filter columns from the table.

    Los filtros de fila no están diseñados para funcionar entre bases de datos.Row filters are not designed to work across databases. SQL ServerSQL Server limita intencionadamente la ejecución de sp_replcmds (que filtra la ejecución debajo) al propietario de la base de datos (dbo). intentionally restricts the execution of sp_replcmds (which filters execute under) to the database owner (dbo). El dbo no tiene privilegios entre bases de datos.The dbo does not have cross database privileges. Con la incorporación de CDC (Captura de datos modificados) a SQL Server 2008SQL Server 2008 the sp_replcmds rellena las tablas de seguimiento de cambios con información a la que el usuario puede volver y que puede consultar.With the addition of CDC (Change Data Capture) in SQL Server 2008SQL Server 2008 the sp_replcmds logic populates the change tracking tables with information that the user can return to and query. Por razones de seguridad, SQL ServerSQL Server limita la ejecución de esta lógica de modo que un dbo malintencionado no pueda asaltar esta ruta de acceso de ejecución.For security reasons, SQL ServerSQL Server restricts the execution of this logic so that a malicious dbo can’t highjack this execution path. Por ejemplo, un dbo malintencionado podría agregar desencadenadores a las tablas de CDC que se ejecutarían en el contexto del usuario que llama a sp_replcmds, en este caso el agente del lector de registros.For example, a malicious dbo could add triggers on CDC tables which would then get executed under the context of the user calling sp_replcmds, in this case the logreader agent. Si la cuenta bajo la que se está ejecutando el agente tiene privilegios mayores, el dbo malintencionado podría escalar sus privilegios.If the account the agent is running under has higher privilege the malicious dbo could escalate his privileges.

Vea tambiénSee Also

Publicar datos y objetos de base de datosPublish Data and Database Objects