sp_changearticle (Transact-SQL)

Se aplica a:SQL ServerAzure SQL Managed Instance

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 publicación.

Convenciones 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 sysname, con un valor predeterminado de NULL.

[ @article = ] 'article' Es el nombre del artículo cuya propiedad se va a cambiar. article es sysname, con un valor predeterminado de NULL.

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

[ @value = ] 'value' Es el nuevo valor de la propiedad article. value es 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 un script de esquema del artículo que se utiliza para crear tablas de destino. El valor predeterminado de es NULL.
del_cmd Instrucción DELETE que se va a ejecutar; de lo contrario, se genera a partir del registro.
descripción Nueva entrada descriptiva del artículo.
dest_object Se proporciona para mantener la compatibilidad con versiones anteriores. Use 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 de es NULL. No se puede cambiar para las publicaciones de replicación punto a punto.
fire_triggers_on_snapshot true Los desencadenadores de usuario replicados se ejecutan cuando se aplica la instantánea inicial.

Nota: Para que los desencadenadores se repliquen, el valor de 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 para 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.
anular Quita la tabla de destino.
eliminación 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 para 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 binary(8). Para obtener más información, vea la sección Comentarios más adelante en este tema.
0x00 Deshabilita el scripting 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 los scripts con la propiedad IDENTITY.
0x08 Replicar columnas de marca de tiempo. Si no se establece, las columnas de marca de tiempo se replican como binarias.
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 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 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.

Nota: Esta opción ha quedado en desuso. Use 0x80 y 0x4000 en su lugar.
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 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 los objetos que no formen 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 relacionada 0x800000000.
0x200000000 Convierte los tipos de datos de fecha y hora (fecha, hora, datetimeoffset y datetime2) que se introdujeron 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 Data Compression.
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.

Consulte la opción relacionada 0x100000000.
0x1000000000 Convierte los tipos definidos por el usuario (UDT) de Common Language Runtime (CLR) de más de 8000 bytes 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 hierarchyid (Transact-SQL).
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.
0x20000000000 Replica el atributo SPARSE para las columnas. Para obtener más información sobre este atributo, vea Usar columnas dispersas.
0x40000000000 Habilite el scripting del agente de instantáneas para crear una tabla optimizada para memoria en el suscriptor.
0x80000000000 Convierte el índice agrupado en un índice no clúster para artículos optimizados para memoria.
status Especifica el nuevo estado de la propiedad.
particiones horizontales dts Solamente se identifica con fines informativos. No compatible. La compatibilidad con versiones posteriores no está garantizada.
incluir nombres de columna Los nombres de columnas se incluyen en la instrucción INSERT replicada.
sin nombres de columna Los nombres de columnas no se incluyen en la instrucción INSERT replicada.
sin particiones horizontales dts La partición horizontal del artículo no se define mediante una suscripción transformable.
none Borra 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.
literales de cadena 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 de 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 más información, vea Manage Oracle Databases (Administrar bases de datos 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 punto a punto.
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 de sync_object y filtro . 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 de sync_object y filtro . 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.
viewlogbased indexed 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 de sync_object y filtro . En este tipo de artículo, no es necesario que la tabla base se publique por separado. No es compatible con publicadores de Oracle.
viewlogbased manualfilter indexed viewlogbasedfilter Artículo de vista indizada basado en registro con filtro manual. Esta opción requiere que también se establezcan las propiedades de sync_object y filtro . En este tipo de artículo, no es necesario que la tabla base se publique por separado. No es compatible con publicadores de Oracle.
viewlogbased manualview indexed 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 un poco, con un valor predeterminado de 0.

0 especifica que los cambios realizados en el artículo 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 especifica que los cambios realizados en el artículo 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 que se reinicialicen las suscripciones existentes. force_reinit_subscription es un bit con un valor predeterminado de 0.

0 especifica que los cambios realizados en el artículo 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 especifica que los cambios realizados en el artículo hacen que las suscripciones existentes se reinicialicen y concede permiso para que se produzca la reinicialización de la suscripción.

Vea en la sección de Notas las propiedades que, si se cambian, requieren que se reinicialicen todas las suscripciones existentes.

[ @publisher = ] 'publisher' Especifica un publicador que no es de SQL Server. publisher es sysname, con un valor predeterminado de NULL.

Nota:

Publisher no debe usarse al cambiar las propiedades de los artículos en un publicador de SQL Server.

Valores de código de retorno

0 (correcto) o 1 (error)

Comentarios

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

Cuando un artículo pertenece a una publicación que admite la replicación transaccional punto a punto, solo se pueden cambiar las propiedades de descripción, ins_cmd, upd_cmd y del_cmd .

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

  • del_cmd

  • dest_table

  • destination_owner

  • ins_cmd

  • pre_creation_cmd

  • schema_options

  • upd_cmd

Cambiar cualquiera de las siguientes propiedades requiere que se reinicialicen las suscripciones existentes y debe especificar un valor de 1 para el parámetro force_reinit_subscription.

  • del_cmd

  • dest_table

  • destination_owner

  • filter

  • ins_cmd

  • status

  • upd_cmd

Dentro de una publicación existente, puede usar sp_changearticle para cambiar un artículo sin tener que quitar y volver a crear 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 que la configuración de bits existente esté desactivada. Para conservar la configuración existente, debe realizar | (OR bit a bit) entre el valor que está estableciendo y el valor actual de schema_option, que se puede determinar 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 (que se muestra en la parte superior) y el tipo de artículo (que se muestra en la primera columna).

Tipo de artículo Tipo de replicación: transaccional Tipo de replicación: instantánea
logbased Todas las opciones Todas las opciones, pero 0x02
logbased manualfilter Todas las opciones Todas las opciones, pero 0x02
logbased manualview Todas las opciones Todas las opciones, pero 0x02
indexed view logbased Todas las opciones Todas las opciones, pero 0x02
indexed view logbased manualfilter Todas las opciones Todas las opciones, pero 0x02
vista manual de logbased de vista indexada Todas las opciones Todas las opciones, pero 0x02
manual de logbase de vistas indexadas Todas las opciones Todas las opciones, pero 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
solo esquema de procedimiento 0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 y 0x80000000 0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 y 0x80000000
ver solo esquema 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
solo func schema 0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 y 0x80000000 0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 y 0x80000000
esquema de vista indizada solo 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:

En el caso de las publicaciones de actualización en cola, el valor schema_option de 0x80 debe estar habilitado. Los valores de schema_option admitidos para 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 [AdventureWorks2022]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

Permisos

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

Consulte también

er y modificar las propiedades de un artículo
Cambiar las propiedades de la publicación y de los artículos
sp_addarticle (Transact-SQL)
sp_articlecolumn (Transact-SQL)
sp_droparticle (Transact-SQL)
sp_helparticle (Transact-SQL)
sp_helparticlecolumns (Transact-SQL)