Durante a replicação transacional, temos dados indo do servidor A para o servidor B.
Digamos que devíamos propagar novamente uma coluna de identidade em uma tabela no servidor A (por qualquer motivo), como isso afetaria os dados no servidor B?
Minha intuição diria que os dados no servidor A usarão a identidade recém-semeada e que seriam enviados para o servidor B como estão (e o servidor B teria conteúdo usando a nova identidade), mas não tenho certeza se isso está correto.
É sempre complicado quando você tem a coluna Identity e essa é uma chave primária para a tabela.
Com base na minha experiência em lidar com T-Rep e Merge, eu recomendaria usar
NOT FOR REPLICATION
NO. Por padrão, é definido como SIM. Você pode fazer isso no sql 2005 e superior dinamicamente (sem afetar a replicação) usandosys.sp_identitycolumnforreplication
.Se você não estiver atualizando os dados no lado do assinante, tudo bem.
Para responder a sua pergunta:
Considerando que você não está atualizando os dados do assinante, quando quiser propagar novamente, você deve sempre pegar o valor máximo da coluna de identidade e, em seguida, propagar novamente o valor de acordo.
Você pode usar o sql abaixo para descobrir isso:
por exemplo, considere a tabela abaixo do cliente:
Agora, se você quiser propagar de alguma forma o valor da identidade, poderá executar
Isso significa que ele definirá o valor de identidade atual como 8, portanto, da próxima vez que qualquer linha for inserida na tabela, ela terá o valor de identidade atual como 8 (CurrentIdentityValue) + 1(Identity_increment) = 9.
Você deve ter cuidado ao fazer isso, pois isso pode causar lacunas de identidade.
Outras coisas que você pode fazer são:
sp_addaritcle
parâmetros como@identity_range ,@pub_identity_range and @threshold
Leia sobre: