sp_changearticle (Transact-SQL)

Cambia las propiedades de un artículo en una publicación transaccional o de instantáneas. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicaciones.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

sp_changearticle [ [@publication= ] 'publication' ]
    [ , [ @article= ] 'article' ]
    [ , [ @property= ] 'property' ]
    [ , [ @value= ] 'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] 'publisher' ]

Argumentos

  • [ @publication=] 'publication'
    Es el nombre de la publicación que contiene el artículo. publication es de tipo sysname y su valor predeterminado es NULL.

  • [ @article=] 'article'
    Es el nombre del artículo cuya propiedad se va a cambiar. article es de tipo sysname y su valor predeterminado es NULL.

  • [ @property=] 'property'
    Es una propiedad del artículo que se va a cambiar. property es de tipo nvarchar(100).

  • [ @value=] 'value'
    Es el nuevo valor de la propiedad del artículo. value es de tipo nvarchar(255).

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

    Propiedad

    Valores

    Descripción

    creation_script

     

    Ruta de acceso y nombre de una script del esquema del artículo que se utiliza para crear tablas de destino. El valor predeterminado es NULL.

    del_cmd

     

    Instrucción DELETE que se va a ejecutar; de lo contrario, se genera a partir del registro.

    description

     

    Nueva entrada descriptiva del artículo.

    dest_object

     

    Se proporciona para mantener la compatibilidad con versiones anteriores. Utilice dest_table.

    dest_table

     

    Nueva tabla de destino.

    destination_owner

     

    Nombre del propietario del objeto de destino.

    filter

     

    Nuevo procedimiento almacenado para filtrar la tabla (filtrado horizontal). El valor predeterminado es NULL. No se puede cambiar para las publicaciones de replicación del mismo nivel.

    fire_triggers_on_snapshot

    true

    Los desencadenadores de usuario replicados se ejecutan cuando se aplica la instantánea inicial.

    NotaNota
    Para replicar los desencadenadores, el valor de la máscara de bits de schema_option debe incluir el valor 0x100.

     

    false

    Los desencadenadores de usuario replicados no se ejecutan cuando se aplica la instantánea inicial.

    identity_range

     

    Controla el tamaño de los intervalos de identidad asignados en el suscriptor. No se admite en la replicación punto a punto.

    ins_cmd

     

    Instrucción INSERT que se ejecuta; de lo contrario, se crea a partir del registro.

    pre_creation_cmd

    Comando de creación previa que puede quitar, eliminar o truncar la tabla de destino antes de que se aplique la sincronización.

     

    none

    No usa ningún comando.

     

    drop

    Quita la tabla de destino.

     

    delete

    Elimina la tabla de destino.

     

    truncate

    Trunca la tabla de destino.

    pub_identity_range

     

    Controla el tamaño de los intervalos de identidad asignados en el suscriptor. No se admite en la replicación punto a punto.

    schema_option

    Especifica el mapa de bits de la opción de generación del esquema para el artículo especificado. schema_option es de tipo binary(8). Para obtener más información, vea la sección Notas más adelante en este tema.

     

    0x00

    Deshabilita las scripts del Agente de instantáneas.

     

    0x01

    Genera la creación del objeto (CREATE TABLE, CREATE PROCEDURE, etc.).

     

    0x02

    Genera los procedimientos almacenados que propagan los cambios del artículo, si se han definido.

     

    0x04

    Las columnas de identidad se incluyen en las scripts con la propiedad IDENTITY.

     

    0x08

    Replica columnas timestamp. Si no está establecido, las columnas timestamp se replican como binary.

     

    0x10

    Genera el índice clúster correspondiente.

     

    0x20

    Convierte los tipos de datos definidos por el usuario (UDT) en tipos de datos base en el suscriptor. Esta opción no se puede utilizar si existe una restricción CHECK o DEFAULT en una columna UDT, si una columna UDT forma parte de la clave principal o si una columna calculada hace referencia a una columna UDT. No es compatible con publicadores de Oracle.

     

    0x40

    Genera los índices no agrupados 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 replica ninguna restricción FOREIGN KEY en 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

    Replica la clave principal y las claves únicas de un artículo de tabla como restricciones mediante instrucciones ALTER TABLE.

    NotaNota
    Esta opción ha quedado obsoleta. En su lugar, utilice 0x80 y 0x4000.

     

    0x10000

    Replica las restricciones CHECK como NOT FOR REPLICATION de manera que no se impongan durante la sincronización.

     

    0x20000

    Replica las restricciones FOREIGN KEY como NOT FOR REPLICATION de manera que no se impongan 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

    Enlaces predeterminados

     

    0x800000

    Enlaces de reglas

     

    0x1000000

    Índice de texto

     

    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 a ntext en el suscriptor.

     

    0x20000000

    Convierte los tipos de datos de objetos grandes (nvarchar(max), varchar(max) y varbinary(max)) que se introdujeron en SQL Server 2005 a tipos de datos que se admiten en SQL Server 2000. Para obtener información sobre cómo se asignan estos tipos, vea la sección sobre asignación de los nuevos tipos de datos en versiones anteriores de Usar varias versiones de SQL Server en una topología de replicación.

     

    0x40000000

    Replica permisos.

     

    0x80000000

    Intenta quitar dependencias a objetos que no forman 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 replica tablas en suscriptores de SQL Server 2005. La replicación de tablas que incluyen columnas FILESTREAM en suscriptores de SQL Server 2000 no se admite, independientemente de la configuración de esta opción de esquema.

    Vea la opción relacionada 0x800000000.

    0x200000000

    Convierte los tipos de datos de fecha y hora (date, time, datetimeoffset y datetime2) que se introducen en SQL Server 2008 a tipos de datos que se admiten en versiones anteriores de SQL Server. Para obtener información sobre cómo se asignan estos tipos, vea la sección sobre asignación de los nuevos tipos de datos en versiones anteriores de Usar varias versiones de SQL Server en una topología de replicación.

    0x400000000

    Replica la opción de compresión para los datos y los índices. Para obtener más información, vea Crear tablas e índices comprimidos.

    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 de FILESTREAM se almacenan en el grupo de archivos predeterminado. La replicación no crea grupos de archivos; por 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.

    Vea la opción relacionada 0x100000000.

    0x1000000000

    Convierte tipos definidos por el usuario (UDT) de Common Language Runtime (CLR) con más de 8.000 bytes en varbinary(max) para que las columnas de tipo UDT se puedan replicar en suscriptores que ejecutan SQL Server 2005.

    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. Para obtener más información sobre cómo usar columnas hierarchyid en tablas replicadas, vea hierarchyid (Transact-SQL).

    0x4000000000

    Replica los índices filtrados de la tabla. Para obtener más información sobre los índices filtrados, vea Directrices generales para diseñar í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.

     

    0x10000000000

    Replica índices en columnas de tipo geography y geometry.

    0x20000000000

    Replica el atributo SPARSE para las columnas. Para obtener más información acerca de este atributo, vea Usar columnas dispersas.

    status

    Especifica el nuevo estado de la propiedad.

     

    dts horizontal partitions

    Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.

     

    include column names

    Los nombres de columnas se incluyen en la instrucción INSERT replicada.

     

    no column names

    Los nombres de columnas no se incluyen en la instrucción INSERT replicada.

     

    no dts horizontal partitions

    La partición horizontal del artículo no se define mediante una suscripción transformable.

     

    none

    Desactiva todas las opciones de estado de la tabla sysarticles y marca el artículo como inactivo.

     

    parameters

    Los cambios se propagan al suscriptor mediante comandos con parámetros. Es el valor predeterminado para los artículos nuevos.

     

    string literals

    Los cambios se propagan al suscriptor mediante valores literales de cadena.

    sync_object

     

    Nombre de la tabla o vista utilizada para generar un archivo de salida de sincronización. El valor predeterminado es NULL. No es compatible con publicadores de Oracle.

    tablespace

    Identifica el espacio de tablas utilizado por la tabla de registro de un artículo publicado desde una base de datos Oracle. Para obtener más información, vea Administrar espacios de tabla de Oracle.

    threshold

     

    Valor de porcentaje que controla cuándo el Agente de distribución asigna un nuevo intervalo de identidad. No se admite para la replicación del mismo nivel.

    type

     

    No es compatible con publicadores de Oracle.

     

    logbased

    Artículo basado en registro.

     

    logbased manualboth

    Artículo basado en registro con filtro manual y vista manual. Esta opción requiere que también se establezcan las propiedades sync_object y filter. No es compatible con publicadores de Oracle.

     

    logbased manualfilter

    Artículo basado en registro con filtro manual. Esta opción requiere que también se establezcan las propiedades sync_object y filter. No es compatible con publicadores de Oracle.

     

    logbased manualview

    Artículo basado en registro con vista manual. Esta opción requiere que también se establezca la propiedad sync_object. No es compatible con publicadores de Oracle.

     

    indexed viewlogbased

    Artículo de vista indizada basado en registro. No es compatible con publicadores de Oracle. En este tipo de artículo, no es necesario que la tabla base se publique por separado.

     

    indexed viewlogbased manualboth

    Artículo de vista indizada basado en registro con filtro manual y vista manual. Esta opción requiere que también se establezcan las propiedades sync_object y filter. En este tipo de artículo, no es necesario que la tabla base se publique por separado. No es compatible con publicadores de Oracle.

     

    indexed viewlogbased manualfilter

    Artículo de vista indizada basado en registro con filtro manual. Esta opción requiere que también se establezcan las propiedades sync_object y filter. En este tipo de artículo, no es necesario que la tabla base se publique por separado. No es compatible con publicadores de Oracle.

     

    indexed viewlogbased manualview

    Artículo de vista indizada basado en registro con vista manual. Esta opción requiere que también se establezca la propiedad sync_object. En este tipo de artículo, no es necesario que la tabla base se publique por separado. No es compatible con publicadores de Oracle.

    upd_cmd

     

    Instrucción UPDATE que se va a ejecutar; de lo contrario, se genera a partir del registro.

    NULL

    NULL

    Devuelve una lista con las propiedades del artículo que se pueden cambiar.

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    Confirma que la acción realizada por este procedimiento almacenado puede invalidar una instantánea existente. force_invalidate_snapshot es de tipo bit y su valor predeterminado es 0.

    0 especifica que los cambios en el artículo no invalidarán la instantánea. Si el procedimiento almacenado detecta que el cambio requiere una nueva instantánea, se producirá un error y no se realizarán cambios.

    1 especifica que los cambios realizados en el artículo pueden invalidar la instantánea y, si hay suscripciones existentes que requieran una nueva instantánea, concede permiso para marcar como obsoleta la instantánea existente y generar una nueva.

    Vea la sección Notas para obtener información acerca de las propiedades que requieren la generación de una nueva instantánea cuando se cambian.

  • [ **@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 de tipo bit y su valor predeterminado es 0.

    0 especifica que los cambios en el artículo no harán 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 especifica que los cambios que se realicen en el artículo harán que se reinicialicen las suscripciones existentes y concede permiso para que la reinicialización se lleve a cabo.

    Vea la sección Notas para obtener información acerca de las propiedades que, cuando cambian, requieren la reinicialización de todas las suscripciones existentes.

  • [ @publisher= ] 'publisher'
    Especifica un publicador que no es de SQL Server. publisher es de tipo sysname y su valor predeterminado es NULL.

    Nota

    publisher no debería utilizarse cuando se cambien las propiedades de artículo de un publicador de SQL Server.

Valores de código de retorno

0 (correcto) o 1 (error)

Comentarios

sp_changearticle se utiliza en la replicación de instantáneas y transaccional.

Cuando un artículo pertenece a una publicación que admite la replicación transaccional del mismo nivel, sólo se pueden cambiar las propiedades description, ins_cmd, upd_cmd y del_cmd.

Si se cambia cualquiera de las siguientes propiedades, es necesario generar una instantánea nueva y especificar el valor 1 para el parámetro force_invalidate_snapshot:

  • del_cmd

  • dest_table

  • destination_owner

  • ins_cmd

  • pre_creation_cmd

  • schema_options

  • upd_cmd

Si se cambia alguna de las siguientes propiedades, es necesario reinicializar las suscripciones existentes y especificar el valor 1 para el parámetro force_reinit_subscription.

  • del_cmd

  • dest_table

  • destination_owner

  • filter

  • ins_cmd

  • status

  • upd_cmd

En una publicación existente, se puede utilizar sp_changearticle para cambiar un artículo sin tener que quitar y crear de nuevo toda la publicación.

Nota

Al cambiar el valor de schema_option, el sistema no realiza una actualización bit a bit. Esto significa que al establecer schema_option mediante sp_changearticle es posible desactivar la configuración de bits existente. Para conservar los valores existentes, debe ejecutar una operación & (AND bit a bit) entre el valor que está estableciendo y el valor actual de schema_option, que puede determinarse ejecutando sp_helparticle.

Opciones de esquema válidas

En la tabla siguiente se describen los valores permitidos de schema_option en función del tipo de replicación (valores de la parte superior) y el tipo de artículo (valores de la primera columna).

Tipo de artículo

Tipo de replicación

 

 

Transaccional

Instantánea

logbased

Todas las opciones

Todas las opciones excepto 0x02

logbased manualfilter

Todas las opciones

Todas las opciones excepto 0x02

logbased manualview

Todas las opciones

Todas las opciones excepto 0x02

indexed view logbased

Todas las opciones

Todas las opciones excepto 0x02

indexed view logbased manualfilter

Todas las opciones

Todas las opciones excepto 0x02

indexed view logbased manualview

Todas las opciones

Todas las opciones excepto 0x02

indexed view logbase manualboth

Todas las opciones

Todas las opciones excepto 0x02

proc exec

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 y 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 y 0x80000000

serializable proc exec

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 y 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 y 0x80000000

proc schema only

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 y 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 y 0x80000000

view schema only

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 y 0x80000000

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 y 0x80000000

func schema only

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000, and 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000, and 0x80000000

indexed view schema only

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 y 0x80000000

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 y 0x80000000

Nota

Para las publicaciones de actualización en cola, se debe habilitar el valor 0x80 de schema_option. Los valores de schema_option admitidos para las publicaciones que no son de SQL Server son: 0x01, 0x02, 0x10, 0x40, 0x80, 0x1000 y 0x4000.

Ejemplo

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));

-- Change the schema options to replicate schema with XML.
USE [AdventureWorks2008R2]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

Permisos

Sólo los miembros de la función fija de servidor sysadmin o la función fija de base de datos db_owner pueden ejecutar sp_changearticle.