Мне любопытно, возможно ли создать таблицу со столбцом, который никогда не может быть изменен, но другие столбцы таблицы могут.
Например, я мог бы представить CreatedByUser
столбец, который никогда не следует менять.
Есть ли для этого встроенные функции в SQL Server, или это возможно только через триггеры или что-то еще?
sql-server
Филипп М
источник
источник
Ответы:
Нет встроенной декларативной поддержки не обновляемых столбцов (за исключением определенных предопределенных случаев, таких как
IDENTITY
)Этот элемент подключения запросил его, но был отклонен. Добавьте DRI, чтобы обеспечить неизменность значений столбцов
UPDATE
Триггер, вероятно , будет самым надежным способом достижения этой цели. Это может проверитьIF UPDATE(CreatedByUser)
и вызвать ошибку и откатить транзакцию, если истина.источник
Я реализовал
UPDATE TRIGGER
подход, предложенный ответом Мартина Смита следующим образом:(Примечание: таблица имеет столбец первичного ключа, называемый ID).
Я отклоняю обновление только в случае изменения значения AssetTypeID. Таким образом, столбец может присутствовать в обновлении, и если значение не изменится, то оно пройдет. (Мне нужно было так)
источник
AssetTypeID
задано ненулевое значение, и вы запускаетеUPDATE Asset SET AssetTypeID = NULL WHERE Asset = the_id
, что отката не будет, потому чтоWHERE i.AssetTypeID <> d.AssetTypeID
в триггере будет значение false, оставляя этот столбец редактируемым.Вы можете использовать представление с производным столбцом. Попробуй это
источник
Почему вы обновляете созданную колонку?
У меня будет два столбца: [create_by] и столбец [ified_by], где при первой вставке будут вставлены все соответствующие столбцы в записи, а при любых последующих обновлениях будет просто обновляться столбец [ified_by] (через триггер в приложении. слой вы можете структурировать свое обновление, чтобы изменить только [updated_by], вместе с вашими соответствующими столбцами)
источник