У меня есть приложение 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/
Вы можете использовать перекрестные запросы к БД в представлениях.