триггер SQL-сервера

Xkeymacs делает действительно хорошее задание этого. Возможно настроить этот инструмент для каждого приложения, работающего на Вашем рабочем столе.

6
задан OMG Ponies 30 October 2009 в 19:31
поделиться

3 ответа

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

  • AFTER триггеры, которые срабатывают после 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», вы должны вставить некоторые поля во «временную» таблицу.

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

Марк

6
ответ дан 16 December 2019 в 21:42
поделиться

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

0
ответ дан 16 December 2019 в 21:42
поделиться

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

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

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

НАЧАТЬ

, если вставлено.status = 'FAIL' ВСТАВИТЬ В dbo.temp (поле1, поле2, поле3)
ВЫБЕРИТЕ i.Name, i.Status, 'что-нибудь' ОТ, вставленное i

0
ответ дан 16 December 2019 в 21:42
поделиться