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

Фильтрация наборов репликации для первых 2

У меня есть набор репликации, который мы используем в репликации слиянием (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)
        )