Comparteix a través de


sp_changearticle (Transact-SQL)

Se aplica a: SQL Server Azure 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 = ] N'publication' ]
    [ , [ @article = ] N'article' ]
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] N'publisher' ]
[ ; ]

Argumentos

[ @publication = ] N'publication'

Nombre de la publicación que contiene el artículo. @publication es sysname, con un valor predeterminado de NULL.

[ @article = ] N'article'

Nombre del artículo cuya propiedad se va a cambiar. @article es sysname, con un valor predeterminado de NULL.

[ @property = ] N'property'

Propiedad de artículo que se va a cambiar. @property es nvarchar(100), con un valor predeterminado de NULL.

[ @value = ] N'value'

Nuevo valor de la propiedad article. @value es nvarchar(255), con un valor predeterminado de NULL.

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 es NULL.
del_cmd DELETE instrucción que se va a ejecutar; de lo contrario, se construye a partir del registro.
description 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 es NULL. No se puede cambiar para las publicaciones en la 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 INSERT instrucción que se va a ejecutar; de lo contrario, se construye a partir del registro.
pre_creation_cmd Comando de creación previa que puede quitar, eliminar o truncar la tabla de destino antes de aplicar la sincronización.
none No usa un 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 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 Notas.
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 crean mediante la IDENTITY propiedad .
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 usar cuando hay una CHECK restricción 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 FOREIGN KEY Replica las restricciones. Si la tabla a la que se hace referencia no forma parte de una publicación, no se replican todas las FOREIGN KEY restricciones de una tabla publicada.
0x400 CHECK Replica las restricciones.
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 en un artículo de tabla como restricciones mediante ALTER TABLE instrucciones .

Nota: Esta opción está en desuso. Utilice 0x80 y 0x4000 en su lugar.
0x10000 CHECK Replica las restricciones para NOT FOR REPLICATION que las restricciones no se apliquen durante la sincronización.
0x20000 FOREIGN KEY Replica las restricciones para NOT FOR REPLICATION 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 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 cualquier objeto que no forme parte de la publicación.
0x100000000 Use esta opción para replicar el FILESTREAM atributo 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 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 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 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 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.
0x20000000000 Replica el SPARSE atributo para las columnas. Para obtener más información sobre este atributo, consulte Uso de 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.
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 columna se incluyen en la instrucción replicada INSERT .
no column names Los nombres de columna no se incluyen en la instrucción replicada INSERT .
no dts horizontal partitions La partición horizontal del artículo no está definida por 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.
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 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 establezca las sync_object propiedades 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 establezca las sync_object propiedades 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 establezca la sync_object propiedad . No es compatible con publicadores de Oracle.
indexed viewlogbased Artículo de vista indizada basado en registro. No es compatible con publicadores de Oracle. Para este tipo de artículo, la tabla base no tiene que publicarse 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 establezca las sync_object propiedades y filter . Para este tipo de artículo, la tabla base no tiene que publicarse 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 establezca las sync_object propiedades y filter . Para este tipo de artículo, la tabla base no tiene que publicarse 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 establezca la sync_object propiedad . Para este tipo de artículo, la tabla base no tiene que publicarse por separado. No es compatible con publicadores de Oracle.
upd_cmd UPDATE instrucción que se va a ejecutar; de lo contrario, se construye 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 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 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.

Consulte la sección Comentarios de las propiedades que, cuando se cambian, requieren la generación de una nueva instantánea.

[ @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 no hacen que se reinicialice la suscripción. Si el procedimiento almacenado detecta que el cambio requiere que se reinicializan las suscripciones existentes, se produce un error y no se realizan 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.

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

[ @publisher = ] N'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 artículo en un publicador de SQL Server.

Valores de código de retorno

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

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 puede cambiar las descriptionpropiedades , ins_cmd, upd_cmdy del_cmd .

El cambio de 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 para 1 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 con 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 según el tipo de schema_option 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
indexed view logbased manualview Todas las opciones Todas las opciones, pero 0x02
indexed view logbase manualboth Todas las opciones Todas las opciones, pero 0x02
proc exec 0x01, 0x20, 0x2000, 0x400000, , 0x20000000x800000, 0x80000000x10000000, , 0x20000000, 0x40000000, y0x80000000 0x01, 0x20, 0x2000, 0x400000, , 0x20000000x800000, 0x80000000x10000000, , 0x20000000, 0x40000000, y0x80000000
serializable proc exec 0x01, 0x20, 0x2000, 0x400000, , 0x20000000x800000, 0x80000000x10000000, , 0x20000000, 0x40000000, y0x80000000 0x01, 0x20, 0x2000, 0x400000, , 0x20000000x800000, 0x80000000x10000000, , 0x20000000, 0x40000000, y0x80000000
proc schema only 0x01, 0x20, 0x2000, 0x400000, , 0x20000000x800000, 0x80000000x10000000, , 0x20000000, 0x40000000, y0x80000000 0x01, 0x20, 0x2000, 0x400000, , 0x20000000x800000, 0x80000000x10000000, , 0x20000000, 0x40000000, y0x80000000
view schema only 0x01, 0x010, 0x020, 0x040, , 0x20000x0100, 0x40000, 0x1000000x8000000x4000000x20000000x2000000x8000000, , y 0x400000000x80000000 0x01, 0x010, 0x020, 0x040, , 0x20000x0100, 0x40000, 0x1000000x8000000x4000000x20000000x2000000x8000000, , y 0x400000000x80000000
func schema only 0x01, 0x20, 0x2000, 0x400000, , 0x20000000x800000, 0x80000000x10000000, , 0x20000000, 0x40000000, y0x80000000 0x01, 0x20, 0x2000, 0x400000, , 0x20000000x800000, 0x80000000x10000000, , 0x20000000, 0x40000000, y0x80000000
indexed view schema only 0x01, 0x010, 0x020, 0x040, , 0x20000x0100, 0x40000, 0x1000000x8000000x4000000x20000000x2000000x8000000, , y 0x400000000x80000000 0x01, 0x010, 0x020, 0x040, , 0x20000x0100, 0x40000, 0x1000000x8000000x4000000x20000000x2000000x8000000, , y 0x400000000x80000000

Nota:

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

Ejemplos

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.