Filtrando Conjuntos de Replicação para os 2 Principais

1

Eu tenho um conjunto de replicação que usamos no Merge Replication (SQL 2005). Estou tentando descobrir como aplicar um filtro do Top 2 a uma tabela.

Além disso, existe uma maneira de configurar um filtro para que ele suba para sub-tabelas ou eu precisaria lidar com isso de forma diferente?

O que estou vendo é um banco de dados de planos que estou replicando para os laptops de nossos usuários. Gostaria de apenas replicar os dois últimos planos e replicar apenas os dados associados para esses dois planos. Exemplo, há uma tabela de medicação que lista todos os medicamentos associados a um determinado plano. Eu gostaria apenas de replicar as linhas na tabela de Medicação que estão vinculadas a um dos planos do Top 2.

Eu não sei como devo fazer isso. Eu vejo a opção de filtro nas propriedades de publicação, mas é por tabela e não parece ter a opção de Top 2.

    
por Refracted Paladin 02.02.2010 / 19:46

1 resposta

1

A filtragem só pode ser feita por meio da cláusula WHERE. O que você precisaria colocar no filtro é algo assim.

WHERE PlanId IN (SELECT TOP (2) PlanId FROM Plan ORDER BY CreateDate DESC)

Se você colocar isso no filtro para cada tabela, ele apenas replicará as linhas para esses dois planos.

Para usar várias colunas para o filtro, algo assim "deveria" funcionar. Eu não testei isso, então pode levar alguns ajustes para que isso aconteça.

WHERE PlanId IN (   
        SELECT PlanId FROM (
            SELECT ROW_NUMBER() OVER (PARTITION BY ClientId, PlanId ORDER BY CreateDate DESC) RowId,
            PlanId, ClientId
            FROM [Plan] a
            where [Plan].PlanId = a.PlanId
                and [Plan].ClientId = a.ClientID
            ) b
        WHERE b.RowId IN (1,2)
        )
    
por 02.02.2010 / 21:00