SQL Server: вместо обновления триггера при просмотре; выберите все столбцы, кроме определенного, и обновите запись базовой таблицы
У меня есть представление, в котором есть realField1, RealField2, Realfield3 и многие другие реальные поля и вычисляемый столбец с именем isHighestVersion
,
(realField означает реальный столбец в таблице SQL Server, имена столбцов для краткости переименованы).
Представление основано на многотабличном запросе (на самом деле он должен ссылаться несколько раз на одну и ту же базовую таблицу, но SQL Server рассматривает их как несколько разных таблиц) и имеет один вычисленный логический столбец с именем isHighestVersion
, Это представление не позволяет обновляться напрямую и выдает следующее сообщение об ошибке при попытке:
Не удалось обновить или вставить представление или функцию 'xyz', поскольку она содержит производное или постоянное поле.
Поскольку у меня будет много таких представлений, а поля базовых таблиц и представлений могут изменяться во время разработки, я хочу иметь "общий" код SQL внутри триггеров, который вытаскивает все столбцы (кроме isHighestVersion
столбец) из "вставленной" таблицы, а затем выполняет обновление правильной записи в одной реальной базовой таблице - конечно, без несуществующих ishighestversion
колонка.
Как это сделать?
1 ответ
Это просто... ты не можешь. Здесь нет работы. Это нарушает ограничения обновляемого представления. Это четко указано как таковое в документации.
Вычисление. Столбец не может быть вычислен из выражения, которое использует другие столбцы.