SQL Server - временная таблица - только выбранные столбцы

Одним из требований недавнего проекта, над которым я работал, было ведение истории данных таблиц базы данных как часть контрольного журнала. Моей первой мыслью о техническом решении было использование триггеров, но после некоторого исследования я узнал о временных таблицах SQL Server (часть ядра SQL Server 2016). Я провел много исследований в этой области и увидел, что временные таблицы могут найти хорошее применение.

Подробнее о временных таблицах: Управление историей временных таблиц в SQL Server 2016

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

CREATE TABLE dbo.Persons
(
  ID BIGINT IDENTITY(1,1) NOT NULL,
  FirstName NVARCHAR(50) NOT NULL,
  LastName NVARCHAR(50),
  PhoneNumber NVARCHAR(20)
)

Теперь, если я создаю временную таблицу поверх этого (SYSTEM_VERSIONING = On), я хочу, чтобы данные вставлялись во временную таблицу только при изменении номера телефона, а не имени и фамилии.

2 ответа

К сожалению, это не так. Как сказано в ссылке в вашем сообщении, "системное управление версиями - все или ничего". Честно говоря, ваш первый инстинкт, вероятно, является вашим лучшим вариантом - любой другой способ сделать это (CDC, репликация, системное управление версиями...) будет собирать больше данных, чем вы хотите, и вам придется свести результаты после факта.

Если вы действительно хотите использовать системное управление версиями, вам просто нужно использовать один из параметров, представленных в предоставленной ссылке: удалить ненужные строки и / или обновить ненужные столбцы до значений NULL.

Я бы порекомендовал использовать свой первый инстинкт и использовать триггеры для реализации чего-то вроде медленно изменяющегося измерения типа 4. Это самый простой метод получения конкретных данных, которые вы хотите.

Вы можете создать одну таблицу для атрибутов, для которых вы хотите вести историю (и вы установите system_versioning = ON) и вторую таблицу с атрибутами, история которых вам не нужна. Между двумя таблицами у вас будет отношение 1 к 1.

Другие вопросы по тегам