sys.sp_changemergearticle (Transact-SQL)

Aplica-se a: SQL Server

Altera as propriedades de um artigo de fusão. Este procedimento armazenado é executado no Publisher no banco de dados de publicação.

Transact-SQL convenções de sintaxe

Syntax

sys.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 ]
[ ; ]

Arguments

[ @publication = ] N'publicação'

O nome da publicação onde o artigo existe. @publication é sysname, sem padrão.

[ @article = ] N'artigo'

O nome do artigo vai mudar. @article é sysname, sem padrão.

@property [ = ] N'propriedade'

A propriedade a alterar para o artigo e publicação em questão. @property é sysname, e pode ser um dos valores listados na tabela seguinte.

@value [ = ] N'valor'

O novo valor para a propriedade especificada. @value é nvarchar(2000), e pode ser um dos valores listados na tabela seguinte.

Esta tabela descreve as propriedades dos artigos e os valores dessas propriedades.

Property Values Description
allow_interactive_resolver true Permite o uso de um resolvedor interativo para o artigo.
false Desativa o uso de um resolvedor interativo para o artigo.
article_resolver Resolver personalizado para o artigo. Aplica-se apenas a um artigo de tabela.
check_permissions (bitmap) 0x00 As permissões ao nível da tabela não são verificadas.
0x10 As permissões ao nível da tabela são verificadas no Publisher antes de INSERT as declarações feitas no Subscritor serem aplicadas no Publisher.
0x20 As permissões ao nível da tabela são verificadas no Publisher antes de UPDATE as declarações feitas no Subscritor serem aplicadas no Publisher.
0x40 As permissões ao nível da tabela são verificadas no Publisher antes de DELETE serem aplicadas as instruções no Assinante no Publisher.
column_tracking true Ativa o rastreamento ao nível da coluna. Aplica-se apenas a um artigo de tabela.

Nota: O acompanhamento ao nível das colunas não pode ser usado ao publicar tabelas com mais de 246 colunas.
false Desliga o rastreamento ao nível da coluna e deixa a deteção de conflitos ao nível da linha. Aplica-se apenas a um artigo de tabela.
compensate_for_errors true As ações compensatórias são realizadas quando ocorrem erros durante a sincronização. Para mais informações, consulte sp_addmergearticle.
false As ações compensatórias não são realizadas, que é o comportamento padrão. Para mais informações, consulte sp_addmergearticle.

Importante: Embora os dados nas linhas afetadas possam parecer fora de convergência, assim que corrigir quaisquer erros, podem ser aplicadas alterações e os dados convergem. Se a tabela fonte de um artigo já estiver publicada noutra publicação, então o valor de compensate_for_errors deve ser o mesmo para ambos os artigos.
creation_script Caminho e nome de um script opcional de esquema de artigo usado para criar o artigo na base de dados de subscrição.
delete_tracking true DELETE as instruções são replicadas, que é o comportamento padrão.
false DELETE As afirmações não são replicadas.

Importante: Definir delete_tracking para false resulta em não-convergência, e as linhas eliminadas precisam de ser removidas manualmente.
description Entrada descritiva para o artigo.
destination_owner Nome do proprietário do objeto na base de dados de subscrição, se não dbo.
identity_range bigint que especifica o tamanho do intervalo a usar ao atribuir novos valores de identidade se o artigo tiver identityrangemanagementoption definido como auto ou auto_identity_range definido como true. Aplica-se apenas a um artigo de tabela. Para mais informações, consulte a secção "Merge Replication" de Replicar Colunas de Identidade.
identityrangemanagementoption manual Desativa a gestão automática de intervalos de identidade. Marca colunas de identidade usando NOT FOR REPLICATION para permitir o tratamento manual do intervalo de identidade. Para obter mais informações, consulte Replicar colunas de identidade.
none Desativa toda a gestão de intervalos de identidade.
logical_record_level_conflict_detection true Um conflito é detetado se forem feitas alterações em qualquer parte do registo lógico. Requer que logical_record_level_conflict_resolution esteja definido como true.
false A deteção de conflitos por defeito é usada conforme especificado por column_tracking.
logical_record_level_conflict_resolution true Todo o registo lógico vencedor sobrepõe o registo lógico perdedor (losing logical record).
false As filas vencedoras não estão limitadas ao registo lógico.
partition_options 0 A filtragem do artigo ou é estática ou não fornece um subconjunto único de dados para cada partição, ou seja, uma partição "sobreposta".
1 As partições sobrepõem-se, e as atualizações DML feitas no assinante não podem alterar a partição a que pertence uma linha.
2 A filtragem do artigo produz partições não sobrepostas, mas múltiplos Subscritores podem receber a mesma partição.
3 A filtragem do artigo produz partições não sobrepostas que são únicas para cada subscrição.

Nota: Se especificar um valor de 3 para partition_options, só pode haver uma única subscrição para cada partição de dados nesse artigo. Se for criada uma segunda subscrição, na qual o critério de filtragem da nova subscrição se resolve para a mesma partição da subscrição existente, a subscrição existente é cancelada.
pre_creation_command none Se a tabela já existir no Assinante, não é tomada qualquer ação.
delete Emite uma eliminação com base na cláusula WHERE no filtro de subconjunto.
drop Deixa a mesa cair antes de a recriar.
truncate Trunca a tabela de destinos.
processing_order int que indica a ordem de processamento dos artigos numa publicação de fusão.
pub_identity_range bigint que especifica o tamanho do intervalo atribuído a um Assinante com uma subscrição de servidor se o artigo tiver identityrangemanagementoption definido para auto ou auto_identity_range definido para true. Este intervalo de identidade é reservado para um Assinante que republica para alocar aos seus próprios Assinantes. Aplica-se apenas a um artigo de tabela. Para mais informações, consulte a secção "Merge Replication" de Replicar Colunas de Identidade.
published_in_tran_pub true O artigo também é publicado numa publicação transacional.
false O artigo também não é publicado numa publicação transacional.
resolver_info É usado para especificar informação adicional exigida por um resolvedor personalizado. Alguns dos Microsoft Resolvers requerem uma coluna fornecida como entrada ao resolvedor. resolver_info é nvarchar(255), com um padrão de NULL. Para mais informações, consulte Conflito Avançado de Replicação de Fusão - COM-Based Resolvers.
schema_option (bitmap) Para obter mais informações, consulte a seção Observações.
0x00 Desativa o scripting do Snapshot Agent e utiliza o script fornecido em creation_script.
0x01 Gera o script de criação de objetos (CREATE TABLE, CREATE PROCEDURE, e assim sucessivamente).
0x10 Gera um índice agrupado correspondente.
0x20 Converte tipos de dados definidos pelo utilizador em tipos de dados base no Assinante. Esta opção não pode ser usada quando existe um CHECK ou DEFAULT restrição numa coluna de tipo definido pelo utilizador (UDT), se uma coluna UDT fizer parte da chave primária, ou se uma coluna computada referenciar uma coluna UDT.
0x40 Gera índices não agrupados correspondentes.
0x80 Inclui integridade referencial declarada nas chaves primárias.
0x100 Replica os disparadores do utilizador num artigo de tabela, se definido.
0x200 Replica as restrições de CHAVE ESTRANGEIRA. Se a tabela referenciada não fizer parte de uma publicação, todas as restrições de CHAVE ESTRANGEIRA numa tabela publicada não são replicadas.
0x400 Replica as restrições do CHECK.
0x800 Replica os predefinidos.
0x1000 Replica a colação ao nível da coluna.
0x2000 Replica propriedades estendidas associadas ao objeto fonte do artigo publicado.
0x4000 Replica chaves únicas se definidas num artigo de tabela.
0x8000 Gera ALTER TABLE instruções ao scriptar restrições.
0x10000 Replica as restrições do CHECK como NÃO PARA REPLICAÇÃO para que as restrições não sejam aplicadas durante a sincronização.
0x20000 Replica as restrições de CHAVE ESTRANHA como NÃO PARA REPLICAÇÃO para que as restrições não sejam aplicadas durante a sincronização.
0x40000 Replica grupos de ficheiros associados a uma tabela ou índice particionado.
0x80000 Replica o esquema de partição para uma tabela particionada.
0x100000 Replica o esquema de partição para um índice particionado.
0x200000 Replica estatísticas de tabelas.
0x400000 Replica Bindings por defeito
0x800000 Replica Ligações de regras
0x1000000 Replica o índice do texto completo
0x2000000 Coleções de esquemas XML ligadas a colunas xml não são replicadas.
0x4000000 Replica índices em colunas xml .
0x8000000 Crie quaisquer esquemas que não estejam já presentes no assinante.
0x10000000 Converte colunas xml em ntext no Assinante.
0x20000000 Converte tipos de dados de objetos grandes (nvarchar(max), varchar(max) e varbinary(max)) que foram introduzidos no SQL Server 2005 (9.x) para tipos de dados suportados no SQL Server 2000 (8.x).
0x40000000 Replicar permissões.
0x80000000 Tente eliminar dependências de quaisquer objetos que não façam parte da publicação.
0x100000000 Use esta opção para replicar o atributo FILESTREAM, se estiver especificado nas colunas varbinary(max ). Não especifique esta opção se estiver a replicar tabelas para subscritores do SQL Server 2005 (9.x). Replicar tabelas com colunas FILESTREAM para subscritores do SQL Server 2000 (8.x) não é suportado, independentemente de como esta opção de esquema esteja definida. Ver opção 0x800000000relacionada.
0x200000000 Converte tipos de dados de data e hora (data, hora, datatimeoffset e datetime2) introduzidos no SQL Server 2008 (10.0.x) para tipos de dados suportados em versões anteriores do SQL Server.
0x400000000 Replica a opção de compressão para dados e índices. Para obter mais informações, consulte Compactação de dados.
0x800000000 Defina esta opção para armazenar dados FILESTREAM no seu próprio grupo de ficheiros no Assinante. Se esta opção não estiver definida, os dados do FILESTREAM são armazenados no grupo de ficheiros predefinido. A replicação não cria grupos de ficheiros; portanto, se definir esta opção, deve criar o grupo de ficheiros antes de aplicar o snapshot no Subscritor. Para mais informações sobre como criar objetos antes de aplicar o snapshot, consulte Executar Scripts Antes e Depois de o snapshot ser Aplicado.

Ver opção 0x100000000relacionada.
0x1000000000 Converte tipos definidos pelo utilizador (UDTs) de common language runtime (CLR) para varbinary(max), de modo que colunas do tipo UDT possam ser replicadas para Assinantes que estejam a correr o SQL Server 2005 (9.x).
0x2000000000 Converte o tipo de dado hierárquido para varbinary(max) para que as colunas do tipo hierárquido possam ser replicadas para os Assinantes que estão a correr o SQL Server 2005 (9.x). Para mais informações sobre como usar colunas hierárquidas em tabelas replicadas, consulte referência de método de tipo de dados hierárquid.
0x4000000000 Replica quaisquer índices filtrados na tabela. Para obter mais informações sobre índices filtrados, consulte Criar índices filtrados.
0x8000000000 Converte os tipos de dados de geografia e geometria para varbinary(max) para que colunas destes tipos possam ser replicadas para Assinantes que estejam a correr o SQL Server 2005 (9.x).
0x10000000000 Replica índices em colunas de geografiae geometria de tipos.
NULL O sistema gera automaticamente uma opção de esquema válida para o artigo.
status active É executado o script inicial de processamento para publicar a tabela.
unsynced O script inicial de processamento para publicar a tabela é executado na próxima execução do Snapshot Agent.
stream_blob_columns true Uma otimização de fluxo de dados é utilizada ao replicar colunas binárias de objetos grandes. No entanto, certas funcionalidades de replicação de fusões, como registos lógicos, podem ainda impedir a utilização da otimização de fluxos. stream_blob_columns é definido para true quando o FILESTREAM está ativado. Isto permite que a replicação dos dados do FILESTREAM funcione de forma ótima e reduza a utilização da memória. Para forçar os artigos da tabela FILESTREAM a não usarem blob streaming, defina stream_blob_columns como false.

Importante: Ativar esta otimização de memória pode prejudicar o desempenho do Merge Agent durante a sincronização. Esta opção só deve ser usada ao replicar colunas que contenham megabytes de dados.
false A otimização não é usada ao replicar colunas binárias de objetos grandes.
subscriber_upload_options 0 Sem restrições às atualizações feitas num Assinante com subscrição de cliente; as alterações são carregadas para o Publisher. Alterar esta propriedade pode exigir que os Subscritores existentes sejam reinicializados.
1 As alterações são permitidas num assinante com subscrição de cliente, mas não são carregadas para o Publisher.
2 Não são permitidas alterações num assinante com subscrição de cliente.
subset_filterclause cláusula WHERE especificando o filtro horizontal. Aplica-se apenas a um artigo de tabela.

Importante: Por razões de desempenho, recomendamos que não aplique funções a nomes de colunas em cláusulas parametrizadas de filtro de linhas, como LEFT([MyColumn]) = SUSER_SNAME(). Se usares HOST_NAME numa cláusula de filtro e sobrescreveres o valor HOST_NAME, podes ter de converter os tipos de dados usando CONVERT. Para mais informações sobre as melhores práticas neste caso, consulte a secção "Overwriting the HOST_NAME() Value" em Parameterized Filters - Parameterized Row Filters.
threshold Valor percentual usado para subscritores que executam o SQL Server Compact ou versões anteriores do SQL Server. thresholdcontrola quando o Merge Agent atribui um novo intervalo de identidade. Quando a percentagem de valores especificados no limiar é utilizada, o Merge Agent cria um novo intervalo de identidade. Usado quando identityrangemanagementoption está definido como auto ou auto_identity_range está definido como true. Aplica-se apenas a um artigo de tabela. Para mais informações, consulte a secção "Merge Replication" de Replicar Colunas de Identidade.
verify_resolver_signature 1 A assinatura digital num resolver personalizado é verificada para determinar se vem de uma fonte confiável.
0 A assinatura digital num resolver personalizado não é verificada para determinar se é de uma fonte confiável.
NULL (padrão) Devolve a lista de valores suportados para @property.

@force_invalidate_snapshot [ = ] force_invalidate_snapshot

Reconhece que a ação tomada por este procedimento armazenado pode invalidar um snapshot existente. @force_invalidate_snapshot é bit, com um padrão de 0.

  • 0 especifica que alterações ao artigo de fusão não tornam o snapshot inválido. Se o procedimento armazenado detetar que a alteração requer um novo snapshot, ocorre um erro e não são feitas alterações.

  • 1 significa que alterações ao artigo de fusão podem tornar o snapshot inválido e, se existirem subscrições existentes que exijam um novo snapshot, dá permissão para que o snapshot existente seja marcado como obsoleto e gerado um novo snapshot.

Consulte a secção de Observações para as propriedades que, quando alteradas, exigem a geração de um novo instantâneo.

@force_reinit_subscription [ = ] force_reinit_subscription

Reconhece que a ação tomada por este procedimento armazenado pode exigir a reinicialização das subscrições existentes. @force_reinit_subscription é bit, com um padrão de 0.

  • 0 especifica que alterações ao artigo de fusão não causam a reinicialização da subscrição. Se o procedimento armazenado detetar que a alteração exigiria a reinicialização das subscrições existentes, ocorre um erro e não são feitas alterações.

  • 1 significa que alterações ao artigo de fusão fazem com que as subscrições existentes sejam reinicializadas e dá permissão para que a reinicialização da subscrição ocorra.

Consulte a secção de Observações para as propriedades que, quando alteradas, exigem que todas as subscrições existentes sejam reinicializadas.

Valores de código de retorno

0 (sucesso) ou 1 (fracasso).

Remarks

sp_changemergearticle é usado na replicação por fusão.

Como sp_changemergearticle é usado para alterar propriedades do artigo que foram inicialmente especificadas usando sp_addmergearticle, consulte sp_addmergearticle para mais informações sobre estas propriedades.

Alterar as seguintes propriedades requer que seja gerado um novo snapshot, e deve especificar um valor de 1 para o parâmetro @force_invalidate_snapshot :

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

Alterar as seguintes propriedades exige que as subscrições existentes sejam reinicializadas, e deve especificar um valor de 1 para o 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

Quando especificas um valor de 3 para partition_options, os metadados são limpos sempre que o Merge Agent é executado e o snapshot particionado expira mais rapidamente. Ao usar esta opção, deve considerar ativar snapshots particionados solicitados pelo assinante. Para mais informações, consulte Criar um Snapshot para uma Publicação de Fusão com Filtros Parametrizados.

Ao definir a column_tracking propriedade, se a tabela já estiver publicada noutras publicações de fusão, o acompanhamento das colunas deve ser o mesmo que o valor usado pelos artigos existentes com base nesta tabela. Este parâmetro é específico apenas para artigos de tabelas.

Se várias publicações publicarem artigos baseados na mesma tabela subjacente, alterar a delete_tracking propriedade ou a compensate_for_errors propriedade de um artigo faz com que a mesma alteração seja feita nos outros artigos baseados na mesma tabela.

Se o login/conta de utilizador do Publisher usado pelo processo de fusão não tiver as permissões corretas da tabela, as alterações inválidas são registadas como conflitos.

Quando alteras o valor de schema_option, o sistema não realiza uma atualização bit a bit. Isto significa que, ao definir schema_option usando sp_changemergearticle, as definições existentes dos bits podem estar desligadas. Para manter as definições existentes, deve executar & (bit a bit AND) entre o valor que está a definir e o valor atual de schema_option, que pode ser determinado executando sp_helpmergearticle.

Caution

Quando tens muitos (talvez centenas) de artigos numa publicação e escreves sp_changemergearticle para um deles, pode demorar muito tempo a ser concluído.

Tabela de opções de esquema válida

A tabela seguinte descreve os valores permitidos schema_option , dependendo do tipo de artigo.

Tipo de artigo Valores das opções de esquema
func schema only 0x01 e 0x2000
indexed view schema only 0x01, 0x040, , 0x0100, 0x2000, 0x400000x1000000, e0x200000
proc schema only 0x01 e 0x2000
table Todas as opções.
view schema only 0x01, 0x040, , 0x0100, 0x2000, 0x400000x1000000, e0x200000

Examples

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

Permissions

Apenas os membros do papel fixo de servidor administrador do sistema ou db_owner papel fixo de base de dados podem executar sp_changemergearticle.