Cenário
Temos uma tabela existente em 3 publicações diferentes (indo para 3 assinantes diferentes), 1 dessas publicações não publica todas as colunas.
Todas essas são assinaturas pull transacionais.
Agora preciso adicionar mais algumas colunas a esta tabela e queremos adicioná-las apenas às duas primeiras publicações. No entanto, do MSDN :
[ @publication_to_add =] 'publication_to_add' É o nome da publicação à qual a nova coluna é adicionada. publication_to_add é nvarchar(4000), com um padrão de ALL. Se ALL, todas as publicações que contêm esta tabela são afetadas. Se a publicação_to_add for especificada, somente esta publicação terá a nova coluna adicionada.
o que implica que você espera que especifique 1 publicação ou TODAS as publicações.
Um exemplo de detalhe de tabela/publicação para ajudar a demonstrar o problema:
Exemplo de tabela
[MyTable] (
ID int IDENTITY(1,1) NOT NULL,
myName varchar(50) NULL,
myDOB datetime,
myJob varchar(100),
mySpouseID int )
Exemplo de publicação/assinante
[InternalPublication] All fields, sent to InternalAdmin system
[Reporting] All fields, sent to Reporting/Datawarehouse system
[External] sent to External accessable system, fields sent:
(ID, myName, myDOB)
Pergunta
Como faço para adicionar:
[myMarriageDate] datetime NULL,
[myDivorceDate] datetime NULL
e apenas adicionado às publicações [InternalPublication] e [Reporting] ?
Nota: a amostra é inventada para proteger os inocentes
sp_repladdcolumn está obsoleto, a menos que você tenha assinantes do SQL2000, você deve usar a opção Replicar alterações do esquema na publicação. Supondo que você tenha definido como Não, acho que você ainda pode usar o sp_repladdcolumn e, se olhar a fonte do proc, parece que ele aceita uma lista de publicações separadas por vírgulas, mas usá-lo é se aventurar em não documentado manipulação de um procedimento obsoleto...ou seja, sem garantias.
EDIT: Os nomes das publicações precisam estar presentes
[]
para funcionar, pois no código de sp_repladdcolumns ele possui:Como o SqlAcid já apontou, o sp sp_repladdcolumn já está obsoleto e não deve ser mais usado. A partir de agora, as mudanças de esquema propagadas devem ser usadas, o que, de qualquer forma, é a linha de ação padrão.
Em vez de propagar algumas alterações de esquema para apenas uma parte de seus assinantes, eu diria para remover o artigo da tabela atual do terceiro assinante, criar uma exibição no editor que conterá apenas uma parte da tabela, usando apenas as colunas necessárias , do que adicionar esta visão como um artigo à terceira publicação e não nas duas primeiras.
Pode ser uma solução melhor para alterações futuras, quando você ainda permitir que outras alterações de esquema sejam propagadas adequadamente para todos os 3 assinantes.