Надеюсь, это достаточно простой вопрос для любых людей SQL...
У нас есть таблица, в которой хранятся данные конфигурации системы, и это привязано к таблице истории через триггеры, чтобы мы могли отслеживать, кто изменил что и когда.
У меня есть требование добавить другое значение в эту таблицу, но это тот, который будет часто меняться из кода и требует, чтобы мы не отслеживали его историю (мы не хотим забивать таблицу с помощью много тысяч обновлений в день.
В настоящее время наш триггер немного похож на этот...
CREATE TRIGGER
[dbo].[SystemParameterInsertUpdate]
ON
[dbo].[SystemParameter]
FOR INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
INSERT INTO SystemParameterHistory
(
Attribute,
ParameterValue,
ParameterDescription,
ChangeDate
)
SELECT
Attribute,
ParameterValue,
ParameterDescription,
ChangeDate
FROM Inserted AS I
END
Я хотел бы добавить некоторую логику, чтобы остановить ее создание записи, если значение атрибута атрибута имеет префикс определенной строки (например, "NoHist _" )
Учитывая, что у меня почти нет опыта работы с триггерами, мне было интересно, как было бы лучше реализовать это... Я пробовал предложение where, например следующее
where I.Attribute NOT LIKE 'NoHist_%'
но он, похоже, не работает. Значение все еще скопировано в таблицу истории.
Любая помощь, которую вы могли бы предложить, была бы оценена.
OK - как и предсказывает Cade Roux, это происходит неэффективно при нескольких обновлениях. Мне придется принять новый подход к этому. Есть ли у кого-нибудь другие предложения, пожалуйста?
Ребята - Пожалуйста, просветите меня здесь... Почему LEFT() предпочтительнее LIKE в этом сценарии? Я знаю, что я принял ответ, но я хотел бы узнать его собственное образование.