SQL Server триггер - PullRequest
       7

SQL Server триггер

5 голосов
/ 30 октября 2009

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

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

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

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

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

Ответы [ 4 ]

5 голосов
/ 30 октября 2009

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

  • ПОСЛЕ срабатывает после ВСТАВКИ, ОБНОВЛЕНИЯ, УДАЛЕНИЯ
  • 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», вы будете вставлять некоторые поля в таблицу «temp».

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

Марк

2 голосов
/ 15 апреля 2015

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

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

0 голосов
/ 02 ноября 2009

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

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

CREATE TRIGGER trgCheckInsertedValues ​​ON status_master ПОСЛЕ ВСТАВКИ AS

НАЧАТЬ

если вставлено .status = 'FAIL' INSERT INTO dbo.temp (field1, field2, field3)
ВЫБЕРИТЕ i.Name, i.Status, «все» ОТ вставленного i

0 голосов
/ 30 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...