Dados de uma tabela em 1 DB necessário para filtro em DB diferente

6

Eu tenho um aplicativo Win Form, Data Entry, que usa 4 bases de dados separadas. Este é um aplicativo conectado ocasionalmente que usa a replicação de mesclagem ( SQL 2005 ) para permanecer em Sincronização. Isso está funcionando bem. O próximo obstáculo que estou tentando resolver é adicionar filtros às minhas publicações.

Neste momento, estamos replicando 70mb, compactados, para cada um dos nossos 150 assinantes quando, na verdade, eles precisam apenas de uma pequena fração disso. Usando filtros Eu posso fazer isso (veja o código abaixo), mas eu tive que fazer uma tabela de mapeamento para fazer isso. Esta tabela de mapeamento consiste em 3 colunas. Um PrimaryID (Guid), WorkerName (varchar) e ClientID (int).

O problema é que preciso dessa tabela presente em todos os QUATRO bancos de dados para usá-la no filtro, pois, até onde eu saiba, views ou consultas cross-db não são permitidas em uma instrução Filter.

Quais são minhas opções?

Parece que gostaria de configurá-lo para ser mantido em 1 Banco de dados e, em seguida, usar Triggers para mantê-lo atualizado nos outros 3 bancos de dados. Para fazer parte do Filtro, eu tenho que incluir essa tabela no Conjunto de Replicação, então como eu sinalizo apropriadamente.

Existe uma maneira melhor, no geral?

SELECT <published_columns> FROM [dbo].[tblPlan] WHERE [ClientID] IN (select ClientID from [dbo].[tblWorkerOwnership] where WorkerID = SUSER_SNAME())

O que permite que você encadeie os filtros, o seguinte está abaixo do primeiro, de modo que seja extraído apenas do primeiro conjunto filtrado.

SELECT <published_columns> FROM [dbo].[tblPlan] INNER JOIN [dbo].[tblHealthAssessmentReview] ON [tblPlan].[PlanID] = [tblHealthAssessmentReview].[PlanID]
    
por Refracted Paladin 31.03.2010 / 16:58

2 respostas

1

link

Você pode usar consultas cruzadas de banco de dados em exibições.

    
por 02.07.2010 / 16:13
1

Dependendo da rapidez com que você precisa desses dados de filtro 'replicados' nos servidores, você pode criar um trabalho nos servidores escravos que atualizou as tabelas com dados do servidor principal. Você não receberia atualizações imediatamente, como faria com os gatilhos, mas acho que o design seria mais limpo.

Por exemplo consultas de banco de dados cruzadas executadas como trabalhos no servidor, que fazem um simples

 DELETE FROM filterTable

e depois

 INSERT INTO filterTable ....

para atualizar a tabela usada nos filtros em um agendamento selecionado.

    
por 20.08.2010 / 16:31