sp_changemergearticle (Transact-SQL)

Se aplica a:SQL Server

Cambia las propiedades de un artículo de mezcla. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicación.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_changemergearticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]

Argumentos

[ @publication = ] N'publication'

Nombre de la publicación en la que existe el artículo. @publication es sysname, sin ningún valor predeterminado.

[ @article = ] N'article'

Nombre del artículo que se va a cambiar. @article es sysname, sin ningún valor predeterminado.

[ @property = ] N'property'

Propiedad que se va a cambiar para el artículo y la publicación especificados. @property es sysname y puede ser uno de los valores enumerados en la tabla siguiente.

[ @value = ] N'value'

El nuevo valor de la propiedad especificada. @value es nvarchar(2000) y puede ser uno de los valores enumerados en la tabla siguiente.

En esta tabla se describen las propiedades de los artículos y los valores de esas propiedades.

Propiedad Valores Descripción
allow_interactive_resolver true Habilita el uso de un solucionador interactivo para el artículo.
false Deshabilita el uso de un solucionador interactivo para el artículo.
article_resolver Solucionador personalizado para el artículo. Solo se aplica a un artículo de tabla.
check_permissions (mapa de bits) 0x00 No se comprueban los permisos de nivel de tabla.
0x10 Los permisos de tabla se comprueban en el publicador antes de que las instrucciones INSERT realizadas en el suscriptor se apliquen en el publicador.
0x20 Los permisos de tabla se comprueban en el publicador antes de que las instrucciones UPDATE realizadas en el suscriptor se apliquen en el publicador.
0x40 Los permisos de tabla se comprueban en el publicador antes de que las instrucciones DELETE realizadas en el suscriptor se apliquen en el publicador.
column_tracking true Activa el seguimiento por columna. Solo se aplica a un artículo de tabla.

Nota: No se puede usar el seguimiento de nivel de columna al publicar tablas con más de 246 columnas.
false Desactiva el seguimiento por columna y deja la detección de conflictos a nivel de fila. Solo se aplica a un artículo de tabla.
compensate_for_errors true Las acciones de compensación se ejecutan cuando se producen errores durante la sincronización. Para obtener más información, consulte sp_addmergearticle.
false No se realizan acciones de compensación, que es el comportamiento predeterminado. Para obtener más información, consulte sp_addmergearticle.

Importante: Aunque los datos de las filas afectadas podrían parecer estar fuera de la convergencia, en cuanto se solucionan los errores, se pueden aplicar cambios y los datos convergen. Si la tabla de origen de un artículo ya está publicada en otra publicación, el valor de compensate_for_errors debe ser el mismo para ambos artículos.
creation_script Ruta de acceso y nombre de un script opcional del esquema del artículo que se utiliza para crear el artículo en la base de datos de suscripciones.
delete_tracking true Las instrucciones DELETE se replican; éste es el comportamiento predeterminado.
false Las instrucciones DELETE no se replican.

Importante: Es necesario quitar manualmente la configuración delete_tracking de los false resultados en la no convergencia y las filas eliminadas.
description Entrada descriptiva del artículo.
destination_owner Nombre del propietario del objeto en la base de datos de suscripciones, si no es dbo.
identity_range bigint que especifica el tamaño del intervalo que se va a usar al asignar nuevos valores de identidad si el artículo ha identityrangemanagementoption establecido auto en o auto_identity_range establecido en true. Solamente se aplica en un artículo de la tabla. Para obtener más información, consulte la sección "Replicación de mezcla" de Replicar columnas de identidad.
identityrangemanagementoption manual Deshabilita la administración automática de intervalos de identidad. Marca las columnas de identidad utilizando NOT FOR REPLICATION para habilitar la administración manual de intervalos de identidad. Para más información, vea Replicar columnas de identidad.
none Deshabilita toda la administración de intervalos de identidad.
logical_record_level_conflict_detection true Se detecta un conflicto si se realizan cambios en cualquier parte del registro lógico. Requiere que logical_record_level_conflict_resolution se establezca en true.
false La detección de conflictos predeterminada se usa según lo especificado por column_tracking.
logical_record_level_conflict_resolution true Todo el registro lógico ganador reemplaza el registro lógico perdedor.
false Las filas ganadoras no están restringidas al registro lógico.
partition_options 0 El filtrado del artículo es estático o no produce un subconjunto único de datos para cada partición, es decir, una partición "superpuesta".
1 Las particiones se superponen y las actualizaciones de DML realizadas en el suscriptor no pueden cambiar la partición a la que pertenece una fila.
2 El filtro para el artículo produce particiones no superpuestas, pero varios suscriptores pueden recibir la misma partición.
3 El filtro para el artículo produce particiones no superpuestas que son exclusivas para cada suscripción.

Nota: Si especifica un valor de 3 para partition_options, solo puede haber una suscripción única para cada partición de datos de ese artículo. Si se crea una segunda suscripció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 quita la suscripción existente.
pre_creation_command none Si la tabla ya existe en el suscriptor, no se lleva a cabo ninguna acción.
delete Emite una eliminación basada en la cláusula WHERE del filtro de subconjunto.
drop Quita la tabla antes de volver a crearla.
truncate Trunca la tabla de destino.
processing_order int que indica el orden de procesamiento de artículos en una publicación de combinación.
pub_identity_range bigint que especifica el tamaño de intervalo asignado a un suscriptor con una suscripción de servidor si el artículo ha identityrangemanagementoption establecido auto en o auto_identity_range establecido en true. Este rango de identidad se reserva para que un suscriptor de republicación pueda realizar asignaciones a sus propios suscriptores. Solamente se aplica en un artículo de la tabla. Para obtener más información, consulte la sección "Replicación de mezcla" de Replicar columnas de identidad.
published_in_tran_pub true El artículo también está publicado en una publicación transaccional.
false El artículo tampoco se publica en una publicación transaccional.
resolver_info Se utiliza para especificar información adicional necesaria para un solucionador personalizado. Algunos de los solucionadores de Microsoft requieren una columna proporcionada como entrada para el solucionador. resolver_info es nvarchar(255), con un valor predeterminado de NULL. Para obtener más información, vea Conflictos de replicación de mezcla avanzada: solucionadores basados en COM.
schema_option (mapa de bits) Para obtener más información, vea la sección Comentarios más adelante en este artículo.
0x00 Deshabilita el scripting mediante el Agente de instantáneas y usa el script proporcionado en creation_script.
0x01 Genera el script de creación del objeto (CREATE TABLE, CREATE PROCEDURE, etc.).
0x10 Genera el índice clúster correspondiente.
0x20 Convierte los tipos de datos definidos por el usuario en tipos de datos base en el suscriptor. Esta opción no se puede usar cuando hay una restricción CHECK o DEFAULT en una columna de tipo definido por el usuario (UDT), si una columna UDT forma parte de la clave principal o si una columna calculada hace referencia a una columna UDT.
0x40 Genera los índices no clúster correspondientes.
0x80 Incluye la integridad referencial declarada para las claves principales.
0x100 Replica los desencadenadores de usuario en un artículo de tabla, si se han definido.
0x200 Replica restricciones FOREIGN KEY. Si la tabla a la que se hace referencia no forma parte de una publicación, no se replican todas las restricciones FOREIGN KEY de una tabla publicada.
0x400 Replica las restricciones CHECK.
0x800 Replica los valores predeterminados.
0x1000 Replica la intercalación de columna.
0x2000 Replica las propiedades extendidas asociadas con el objeto de origen del artículo publicado.
0x4000 Replica las claves únicas si están definidas en un artículo de tabla.
0x8000 Genera instrucciones ALTER TABLE al incluir restricciones en scripting.
0x10000 Replica las restricciones CHECK como NOT FOR REPLICATION para que las restricciones no se apliquen durante la sincronización.
0x20000 Replica las restricciones FOREIGN KEY como NOT FOR REPLICATION para que las restricciones no se apliquen durante la sincronización.
0x40000 Replica grupos de archivos asociados con un índice o una tabla con particiones.
0x80000 Replica el esquema de partición de una tabla con particiones.
0x100000 Replica el esquema de partición de un índice con particiones.
0x200000 Replica las estadísticas de tabla.
0x400000 Replica enlaces predeterminados
0x800000 Replica los enlaces de reglas.
0x1000000 Replica el índice de texto completo.
0x2000000 Las colecciones de esquemas XML enlazadas a columnas xml no se replican.
0x4000000 Replica índices en columnas xml .
0x8000000 Crea esquemas que aún no existen en el suscriptor.
0x10000000 Convierte columnas xml en ntext en el suscriptor.
0x20000000 Convierte tipos de datos de objetos grandes (nvarchar(max), varchar(max)y varbinary(max)) que se introdujeron en SQL Server 2005 (9.x) en tipos de datos que se admiten en SQL Server 2000 (8.x).
0x40000000 Replicación de permisos.
0x80000000 Intente quitar dependencias a cualquier objeto que no forme parte de la publicación.
0x100000000 Use esta opción para replicar el atributo FILESTREAM, si se especifica en columnas varbinary(max). No especifique esta opción si va a replicar tablas en suscriptores de SQL Server 2005 (9.x). No se admite la replicación de tablas que tienen columnas FILESTREAM en suscriptores de SQL Server 2000 (8.x), independientemente de cómo se establezca esta opción de esquema. Consulte la opción 0x800000000relacionada .
0x200000000 Convierte los tipos de datos de fecha y hora (fecha, hora, datetimeoffset y datetime2) que se presentan en SQL Server 2008 (10.0.x) en tipos de datos compatibles con versiones anteriores de SQL Server.
0x400000000 Replica la opción de compresión para los datos y los índices. Para obtener más información, consulte Compresión de datos.
0x800000000 Establezca esta opción para almacenar los datos de FILESTREAM en su propio grupo de archivos en el suscriptor. Si no se establece esta opción, los datos FILESTREAM se almacenan en el grupo de archivos predeterminado. La replicación no crea grupos de archivos; Por lo tanto, si establece esta opción, debe crear el grupo de archivos antes de aplicar la instantánea en el suscriptor. Para obtener más información sobre cómo crear objetos antes de aplicar la instantánea, vea Ejecutar scripts antes y después de aplicar la instantánea.

Consulte la opción 0x100000000relacionada .
0x1000000000 Convierte los tipos definidos por el usuario (UDT) de Common Language Runtime (CLR) en varbinary(max) para que las columnas de tipo UDT se puedan replicar en suscriptores que ejecutan SQL Server 2005 (9.x).
0x2000000000 Convierte el tipo de datos hierarchyid en varbinary(max) para que las columnas de tipo hierarchyid se puedan replicar en suscriptores que ejecutan SQL Server 2005 (9.x). Para obtener más información sobre cómo usar columnas hierarchyid en tablas replicadas, consulte referencia de método de tipo de datos hierarchyid.
0x4000000000 Replica los índices filtrados de la tabla. Para obtener más información sobre los índices filtrados, vea Crear índices filtrados.
0x8000000000 Convierte los tipos de datos geography y geometry en varbinary(max) para que las columnas de estos tipos se puedan replicar en suscriptores que ejecutan SQL Server 2005 (9.x).
0x10000000000 Replica índices en columnas de tipo geography y geometry.
NULL El sistema genera automáticamente una opción de esquema válida para el artículo.
status active Se ejecuta el script inicial de proceso para publicar la tabla.
unsynced El script de procesos inicial para publicar la tabla se ejecuta la próxima vez que se ejecute el Agente de instantáneas.
stream_blob_columns true Se utiliza una optimización del flujo de datos al replicar columnas de objetos binarios grandes. No obstante, ciertas funciones de la replicación de mezcla, como los registros lógicos, pueden impedir que se utilice la optimización de flujos. stream_blob_columns se establece en true cuando FILESTREAM está habilitado. Esto permite que la replicación de datos FILESTREAM se realice de forma óptima y que se reduzca el uso de memoria. Para forzar que los artículos de la tabla FILESTREAM no usen el streaming de blobs, establezca en stream_blob_columns false.

Importante: Habilitar esta optimización de memoria podría afectar al rendimiento del Agente de mezcla durante la sincronización. Esta opción solo se debe utilizar al replicar columnas que contienen megabytes de datos.
false La optimización no se usa al replicar columnas de objetos binarios grandes.
subscriber_upload_options 0 No existen restricciones en actualizaciones realizadas en el suscriptor con una suscripción de cliente; los cambios se cargan en el publicador. Cambiar esta propiedad puede requerir que se reinicialicen los suscriptores existentes.
1 Los cambios se permiten en un suscriptor con una suscripción de cliente, pero no se cargan en el publicador.
2 Los cambios no se permiten en un suscriptor con una suscripción de cliente.
subset_filterclause Cláusula WHERE que especifica el filtrado horizontal. Solo se aplica a un artículo de tabla.

Importante: Por motivos de rendimiento, se recomienda no aplicar funciones a nombres de columna en cláusulas de filtro de fila con parámetros, como LEFT([MyColumn]) = SUSER_SNAME(). Si usa HOST_NAME en una cláusula de filtro e invalida el valor de HOST_NAME, es posible que tenga que convertir tipos de datos mediante CONVERT. Para obtener más información sobre los procedimientos recomendados para este caso, vea la sección "Invalidar el valor de HOST_NAME() en Filtros con parámetros: filtros de fila con parámetros.
threshold Valor porcentual usado para suscriptores que ejecutan SQL Server Compact o versiones anteriores de SQL Server. thresholdcontrola cuando el Agente de mezcla asigna un nuevo intervalo de identidades. Si se utiliza el porcentaje de valores especificado en el umbral, el Agente de mezcla crea un nuevo intervalo de identidad. Se usa cuando identityrangemanagementoption se establece auto en o auto_identity_range se establece en true. Solamente se aplica en un artículo de la tabla. Para obtener más información, consulte la sección "Replicación de mezcla" de Replicar columnas de identidad.
verify_resolver_signature 1 Se comprueba la firma digital en un solucionador personalizado para determinar si procede de un origen de confianza.
0 No se comprueba la firma digital en un solucionador personalizado para determinar si procede de un origen de confianza.
NULL (valor predeterminado) Devuelve la lista de valores admitidos para @property.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Confirma que la acción realizada por este procedimiento almacenado podría invalidar una instantánea existente. @force_invalidate_snapshot es bit, con un valor predeterminado de 0.

  • 0 especifica que los cambios realizados en el artículo de combinación no hacen que la instantánea no sea válida. Si el procedimiento almacenado detecta que el cambio requiere una nueva instantánea, se producirá un error y no se realizarán cambios.

  • 1 significa que los cambios en el artículo de combinación pueden hacer que la instantánea no sea válida y, si hay suscripciones existentes que requerirían una nueva instantánea, concede permiso para que la instantánea existente se marque como obsoleta y se genere una nueva instantánea.

Vea en la sección de Notas las propiedades que, si se cambian, requieren que se genere una instantánea nueva.

[ @force_reinit_subscription = ] force_reinit_subscription

Confirma que la acción realizada por este procedimiento almacenado puede requerir la reinicialización de las suscripciones existentes. @force_reinit_subscription es bit, con un valor predeterminado de 0.

  • 0 especifica que los cambios realizados en el artículo de combinación no hacen que se reinicialice la suscripción. Si el procedimiento almacenado detecta que el cambio requiere la reinicialización de las suscripciones existentes, se producirá un error y no se realizarán cambios.

  • 1 significa que los cambios realizados en el artículo de combinación hacen que se reinicialicen las suscripciones existentes y se concede permiso para que se produzca la reinicialización de la suscripción.

Consulte la sección Comentarios de las propiedades que, cuando se cambian, requieren que se reinicialicen todas las suscripciones existentes.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

sp_changemergearticle se usa en la replicación de mezcla.

Dado sp_changemergearticle que se usa para cambiar las propiedades de artículo que se especificaron inicialmente mediante sp_addmergearticle, consulte sp_addmergearticle para obtener más información sobre estas propiedades.

El cambio de las propiedades siguientes requiere que se genere una nueva instantánea y debe especificar un valor para 1 el parámetro @force_invalidate_snapshot :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • schema_options
  • subset_filterclause

El cambio de las siguientes propiedades requiere que se reinicializan las suscripciones existentes y debe especificar un valor para 1 el parámetro @force_reinit_subscription :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • identityrangemanagementoption
  • subscriber_upload_options
  • subset_filterclause
  • creation_script
  • schema_option
  • logical_record_level_conflict_detection
  • logical_record_level_conflict_resolution

Cuando se especifica un valor de 3 para partition_options, los metadatos se limpian cada vez que se ejecuta el Agente de mezcla y la instantánea con particiones expira más rápidamente. Al utilizar esta opción, debe considerar la habilitación de la instantánea con particiones solicitada por el suscriptor. Para más información, consulte Crear una instantánea para una publicación de mezcla con filtros con parámetros.

Al establecer la column_tracking propiedad , si la tabla ya está publicada en otras publicaciones de combinación, el seguimiento de columnas debe ser el mismo que el valor que usan los artículos existentes en función de esta tabla. Este parámetro es específico solamente de los artículos de tabla.

Si varias publicaciones publican artículos basados en la misma tabla subyacente, cambiar la delete_tracking propiedad o la compensate_for_errors propiedad de un artículo hace que se realice el mismo cambio en los demás artículos basados en la misma tabla.

Si la cuenta de inicio de sesión o usuario del publicador usada por el proceso de combinación no tiene los permisos de tabla correctos, los cambios no válidos se registran como conflictos.

Al cambiar el valor de schema_option, el sistema no realiza una actualización bit a bit. Esto significa que, al establecer schema_option con sp_changemergearticle, es posible que la configuración de bits existente esté desactivada. Para conservar la configuración existente, debe realizar y (AND bit a bit) entre el valor que está estableciendo y el valor actual de schema_option, que se puede determinar ejecutando sp_helpmergearticle.

Precaución

Cuando muchos (quizás cientos) de artículos de una publicación y se ejecutan sp_changemergearticle para uno de los artículos, puede tardar mucho tiempo en finalizar la ejecución.

Tabla de opciones de esquema válida

En la tabla siguiente se describen los valores permitidos schema_option , en función del tipo de artículo.

Tipo de artículo Valores de las opciones de esquema
func schema only 0x01 y 0x2000
indexed view schema only 0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x1000000, y 0x200000
proc schema only 0x01 y 0x2000
table Todas las opciones.
view schema only 0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x1000000, y 0x200000

Ejemplos

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

Permisos

Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_changemergearticle.