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.
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.
NotaPara 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.
NotaEsta 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
Solo 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)
Notas
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 [AdventureWorks]
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.
Vea también