SQL Server — отслеживание изменений в данных представлений

#sql-server #sql-server-2008

#sql-сервер #sql-server-2008

Вопрос:

Я хотел бы отслеживать изменения в данных представлений. Я не думаю, что это возможно из коробки с текущим отслеживанием изменений sql Server. Кто-нибудь придумал решение этой проблемы?

// редактировать Я синхронизирую данные между двумя базами данных. Синхронизация работает в основном с представлениями (и с некоторыми таблицами), поэтому мне нужно отслеживать изменения, вносимые в данные представлений (вставка / обновление / удаление). Задача не является тривиальной, потому что некоторые представления являются просто объединениями, а другие используют PIVOT.

Комментарии:

1. Пока не ответ на вопрос. Кажется, это возможно, учитывая, что полнотекстовое индексирование, похоже, использует отслеживание изменений и, безусловно, позволяет индексировать представление, если оно является индексированным представлением.

2. Индексирование представлений — сложная и неприятная вещь. Сводная — не может индексироваться, левое соединение — не может индексироваться. Есть много функций, которые вы не можете использовать, если хотите, чтобы ваше представление было проиндексировано. Посмотрите здесь: sqlheaven.blogspot.com/2011/06/indexed-view-limitations.html

3. @kubal5003, вы нашли какие-либо решения? У меня точно такая же проблема.

4. Извините, это было давно. Я даже больше не помню проблему.

Ответ №1:

Нет. Нет, вы не можете. Я бы хотел, чтобы вы могли.

Комментарии:

1. Серьезно — какова ценность ответа на вопрос, заданный 8 лет назад?

2. @kubal5003 Для улучшения базы знаний для тех, кто все еще ищет лучший ответ 8 лет спустя.

Ответ №2:

Вы можете отслеживать изменения с помощью триггеров DDL .. Похоже, что они работают на SQL Server версии 2005 и выше.

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

Это записывает предыдущие версии (у вас уже есть текущая в самой базе данных) без какого-либо участия пользователя.

Это освободит вас от необходимости быть бутылочным горлышком и утверждать или применять каждое изменение.

Я недостаточно прочитал об этом, чтобы узнать, захватит ли это пользователя, который отправил изменение.

Комментарии:

1. Извините, вы неправильно поняли идею. В комментариях ниже было больше информации об этом, но сейчас я тоже обновил свой пост.

Ответ №3:

Управляйте изменениями на вашем сервере управления версиями и создавайте свои представления С ПОМОЩЬЮ ШИФРОВАНИЯ, чтобы люди не возились с ними на сервере.

Комментарии:

1. Речь идет не об изменениях в источнике представлений, а в данных. SQL Server 2008 имеет встроенное отслеживание изменений для таблиц, но ничего подобного для представлений.

2. А. Обновляемые представления? С какой стати вам это нужно? (Если вам действительно нужно, чтобы они были обновляемыми, вы застряли, выполняя триггеры).

3. Обновления производятся в базовых таблицах, а не в самих представлениях, но я синхронизирую данные с другой базой данных, поэтому было бы неплохо, если бы я мог просто получить информацию о том, что изменилось в представлении, а не в базовой таблице. Т.Е. в одном представлении я использую PIVOT, поэтому это не просто..

4. Невозможно обеспечить необходимую функциональность платформы без снижения производительности.

5. SQL Server использует моментальные снимки для хранения информации об изменениях, поэтому вычисление различий с использованием моментальных снимков является одноразовым отключением сервера — только когда кто-то запрашивает информацию.