У меня есть набор репликации, который мы используем в репликации слиянием (SQL 2005). Я пытаюсь понять, как применить фильтр Top 2 к таблице.
Кроме того, есть ли способ настроить фильтр, чтобы он просачивался в подтаблицы, или мне нужно было бы обрабатывать это по-другому?
Я смотрю на базу данных планов, которую я реплицирую на ноутбуки наших пользователей. Я хотел бы реплицировать только последние два плана и реплицировать только связанные данные для этих двух планов. Например, есть таблица лекарств, в которой перечислены все лекарства, связанные с определенным планом. Я бы хотел воспроизвести только те строки в таблице «Лекарства», которые связаны с одним из двух лучших планов.
Я не знаю, как мне поступить с этим. Я вижу параметр «Фильтр» в свойствах публикации, но он по таблице, и у меня, похоже, нет варианта «Первые 2».
Фильтрацию можно выполнить только с помощью предложения WHERE. Что вам нужно будет поместить в фильтр, это что-то вроде этого.
WHERE PlanId IN (SELECT TOP (2) PlanId FROM Plan ORDER BY CreateDate DESC)
Если вы поместите это в фильтр для каждой таблицы, он будет копировать только строки для этих двух планов.
Чтобы использовать несколько столбцов для фильтра, «должно» работать что-то вроде этого. Я не тестировал это, поэтому может потребоваться некоторая настройка, чтобы это произошло.
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)
)