Назад | Перейти на главную страницу

Данные из таблицы в 1 БД необходимы для фильтрации в разных БД

У меня есть приложение Win Form, Data Entry, которое использует 4 отдельные базы данных. Это приложение, которое иногда подключается, которое использует репликацию слиянием (SQL 2005), чтобы оставаться в синхронизации. Это работает нормально. Следующее препятствие, которое я пытаюсь решить, - это добавление фильтров в мои публикации.

Прямо сейчас мы реплицируем 70 МБ в сжатом виде каждому из наших 150 подписчиков, когда, по правде говоря, им нужна лишь крошечная часть этого количества. Используя фильтры, я могу это сделать (см. Код ниже), но для этого мне пришлось создать таблицу сопоставления. Эта таблица сопоставления состоит из 3 столбцов. PrimaryID (Guid), WorkerName (varchar) и ClientID (int).

Проблема в том, что мне нужна эта таблица, присутствующая во всех ЧЕТЫРЕХ базах данных, чтобы использовать ее для фильтра, поскольку, насколько мне известно, представления или запросы между базами данных не разрешены в заявлении фильтра.

Какие у меня варианты?

Похоже, я бы настроил его поддерживать в 1 базе данных, а затем использовал триггеры, чтобы обновлять его в других 3 базах данных. Чтобы быть частью фильтра, я должен включить эту таблицу в набор репликации, чтобы я мог ее соответствующим образом отметить.

Есть ли вообще способ лучше?

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

Это позволяет вам объединять фильтры в цепочку, следующий находится ниже первого, поэтому он извлекается только из первого отфильтрованного набора.

SELECT <published_columns> FROM [dbo].[tblPlan] INNER JOIN [dbo].[tblHealthAssessmentReview] ON [tblPlan].[PlanID] = [tblHealthAssessmentReview].[PlanID]

В зависимости от того, насколько быстро вам нужно «реплицировать» данные фильтра на серверы, вы можете создать задание на подчиненных серверах, которое обновит таблицы данными с первичного сервера. Вы не получите обновления сразу, как с триггерами, но я думаю, что дизайн будет чище.

Например. перекрестные запросы к базе данных, выполняемые как задания на сервере, которые выполняют простой

 DELETE FROM filterTable

а потом

 INSERT INTO filterTable ....

для обновления таблицы, используемой в фильтрах, по выбранному вами расписанию.

http://www.sqlservercentral.com/articles/Advanced/designingcrossdatabasequeries/1753/

Вы можете использовать перекрестные запросы к БД в представлениях.