#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 использует моментальные снимки для хранения информации об изменениях, поэтому вычисление различий с использованием моментальных снимков является одноразовым отключением сервера — только когда кто-то запрашивает информацию.