Необходимо синхронизировать таблицу с запросом (представлением) в той же базе данных сервера SQL. - PullRequest
1 голос
/ 10 февраля 2011

Мне нужно синхронизировать таблицу с рекурсивным запросом CTE, который соединяется с несколькими таблицами.CTE может возвращать разные результаты при каждом запуске (если были внесены какие-либо изменения в таблицы, к которым он присоединяется).CTE работает медленно, и я не могу позволить запустить триггер, так как запрос, вызвавший срабатывание триггера, не будет возвращаться до тех пор, пока не сработает триггер (я не хочу, чтобы выполнялось простое обновление одной записи15 секунд, потому что он ждет на курке, чтобы закончить).Любые подробности о том, как внедрить решение в SSMS, также были бы хорошими, но не обязательными.

Одним из решений было бы запланированное задание на запуск CTE и объединение его результатов с таблицей.Запланированное задание может выполняться каждые несколько секунд, поэтому таблица обновляется настолько, насколько это возможно.Но я не знаю, как создать запланированное задание в Sql Server 2005 или как объединить результаты запроса CTE с таблицей.

Чтобы повторить мой вопрос:

Как мне поддерживать актуальность таблицы как можно ближе к реальному времени, используя CTE?

1 Ответ

0 голосов
/ 17 февраля 2011

Я понял это сам. Используя Sql Server Agent, вместе с очень классной утилитой tablediff.exe , я смог синхронизировать представление и таблицу с помощью операторов upsert / delete, сгенерированных утилитой tablediff. Для этого потребовалась временная таблица и уникальный столбец в представлении (который я создал путем объединения двух идентификаторов столбцов в один (который, как я знал, сделает его уникальным)).

Это было намного лучшее решение, потому что мне не нужно было обрезать живую таблицу или отбрасывать ее и переименовывать временную таблицу. Кроме того, он работает в своем собственном потоке / среде, так что все в порядке, если для запуска требуется минута (по сравнению с использованием триггера, который всегда должен быть быстрым).

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

...