Ключевое слово SQL Action

Что делает ключевое слово SQL Action? Могу ли я использовать это ключевое слово в триггере и определить, был ли триггер вызван вставкой, удалением или обновлением?


person Brian Bolton    schedule 18.11.2008    source источник
comment
Я разместил более длинный вопрос, который действительно описывает то, что я пытаюсь сделать здесь: stackoverflow.com/questions/299931/   -  person Brian Bolton    schedule 18.11.2008


Ответы (2)


ДЕЙСТВИЕ зарезервировано для использования в вызовах функций ODBC. Эти слова не ограничивают минимальную грамматику SQL; однако для обеспечения совместимости с драйверами, поддерживающими основную грамматику SQL, приложениям следует избегать использования этих ключевых слов.

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

CREATE TRIGGER TriggerName
ON TableName
  [FOR|AFTER|INSTEAD OF]
  AFTER,UPDATE,DELETE
AS
 ...

Если вам нужно определить, какой из них вызвал триггер, вы должны проверить вставленные и удаленные таблицы, как показано ниже.

IF EXISTS (SELECT TOP 1 * FROM Inserted) AND NOT EXISTS (SELECT TOP 1 * FROM Deleted) --INSERT
  ...

IF EXISTS (SELECT TOP 1 * FROM Inserted) AND EXISTS (SELECT TOP 1 * FROM Deleted) --UPDATE
  ...

IF NOT EXISTS (SELECT TOP 1 * FROM Inserted) AND EXISTS (SELECT TOP 1 * FROM Deleted) --DELETE
  ...
person GluedHands    schedule 18.11.2008

Нет, вы не можете использовать это для этого. Но вы можете посмотреть Вставлено и удалено таблицы, чтобы увидеть, что произошло.

Различный базовый пример будет выглядеть примерно так:

If exists (select * from inserted) and exists (select * from deleted)
    --Update happened
If exists (select * from inserted)
    --Insert happened
If exists (select * from deleted)
    --Delete happened
Else
    --Nothing happened

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

Однако, если вы опубликуете в своем вопросе более подробную информацию о том, что вы пытаетесь сделать, будет легче дать более конкретный ответ.

person Kevin Fairchild    schedule 18.11.2008