У триггеров есть объект THISROW - PullRequest
2 голосов
/ 19 февраля 2012

Пример даст краткое объяснение того, о чем я говорю:

 AFTER INSERT,UPDATE
 IF (This.Active = 1) 
      BEGIN
         UPDATE Table2 SET AllActive = 1 WHERE This.ID = Table2.ID
      END
 ELSE
      BEGIN
         UPDATE Table2 SET AllActive = 0 WHERE This.ID = Table2.ID
      END

Я использую this, потому что именно это я и собираюсь сделать.

У триггеров есть this как javascript?

Если нет, то что будет лучше?

1 Ответ

4 голосов
/ 19 февраля 2012

Одно распространенное заблуждение о триггерах в SQL Server: они НЕ запускаются в каждой строке - но оператором .

И поэтому, когда у вас есть оператор, который вставляет или обновляет несколько строк, ваши псевдотаблицы Inserted (и / или Deleted) в триггере будут содержать несколько строк. НЕ предположим, что вы имеете дело с одной строкой!Такой триггер рано или поздно выйдет из строя

Так что в вашем случае вы, вероятно, захотите написать что-то вроде этого:

  UPDATE t 
  SET AllActive = i.Active
  FROM Inserted i
  INNER JOIN dbo.Table2 AS t 
  ON t.ID = i.ID

Это обновит все строки таблицы Table2установите для столбца AllActive значение Active для каждой строки, содержащейся в таблице Inserted (содержит вновь вставленные строки и новые значения для обновленных строк)

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