триггер сервера sql

У меня есть структура таблицы, как это:

create table status_master
(
  Name varchar(40)
  status varchar(10)
)

Мне нужно создать триггер для столбца состояния, если значение столбца состояния обновлено значение FAIL, тогда триггер вызывает одну команду вставки, например:

insert into temp value('s',s's')

Не могли бы вы дать мне идею, чтобы решить эту проблему?


person Nanda    schedule 30.10.2009    source источник
comment
можешь уточнить? Я не понимаю, чего вы на самом деле хотите добиться...   -  person marc_s    schedule 30.10.2009
comment
синтаксическая ошибка, как в вашем примере, никогда не попадет в триггер.   -  person Dave    schedule 30.10.2009
comment
Согласен с marc_s. Каково обновленное значение? Статус? Какова структура таблицы под названием temp? Что это за значения, которые вы туда вставили?   -  person Aaron Bertrand    schedule 30.10.2009


Ответы (4)


Не уверен, чего вы действительно хотите достичь, но в SQL Server у вас есть два типа триггеров:

  • ПОСЛЕ триггеры, которые срабатывают после INSERT, UPDATE, DELETE
  • Триггеры INSTEAD OF, которые могут перехватить операцию (INSERT, UPDATE, DELETE) и сделать что-то вместо нее

SQL Server не имеет триггеров BEFORE INSERT/UPDATE/DELETE, которые есть в других СУБД.

У вас может быть любое количество триггеров AFTER, но только один триггер INSTEAD OF для каждой операции (INSERT, UPDATE, DELETE).

Более распространенным случаем является триггер AFTER, например:

CREATE TRIGGER trgCheckInsertedValues
ON status_master
AFTER INSERT
AS
BEGIN
  INSERT INTO dbo.temp(field1, field2, field3)
     SELECT i.Name, i.Status
     FROM inserted i
     WHERE i.Status = 'FAIL'
END

Здесь я просматриваю «вставленную» псевдотаблицу, которая содержит все строки, вставленные в вашу таблицу, и для каждой строки, содержащей «status = FAIL», вы будете вставлять некоторые поля во «временную» таблицу.

Опять же - не уверен, что вы действительно хотите в деталях, но это будет грубый план того, как это сделать в коде SQL Server T-SQL.

Марк

person marc_s    schedule 30.10.2009

Триггер в SQL используется для запуска запроса при выполнении любого действия в конкретной таблице, например вставки, удаления, обновления.

http://allinworld99.blogspot.com/2015/04/triggers-in-sql.html

person Merbin Joe    schedule 15.04.2015

Вам нужен триггер INSTEAD OF INSERT, UPDATE. В вашем триггере вы пытаетесь вставить или обновить себя внутри try-catch. Если возникает ошибка, вы вставляете эти значения в другую таблицу (при условии, что это какая-то таблица регистрации).

person Agent_9191    schedule 30.10.2009

Предполагая, что вы имеете в виду, если новое значение статуса будет FAIL, то как насчет этого:

триггеры ссылаются на новую строку записи как на «вставленную», а на старую — как на «удаленную».

СОЗДАТЬ ТРИГГЕР trgCheckInsertedValues ​​ON status_master ПОСЛЕ ВСТАВКИ КАК

НАЧИНАТЬ

if insert.status = 'FAIL' INSERT INTO dbo.temp(field1, field2, field3)
SELECT i.Name, i.Status, 'что-нибудь' ИЗ вставленного i

person Doctor Chris Chris    schedule 02.11.2009