Могу ли я выбрать все таблицы с более чем одним триггером обновления - PullRequest
0 голосов
/ 27 ноября 2009

Могу ли я выбрать все таблицы с более чем одним триггером обновления? Следующий код выбирает все таблицы с более чем одним триггером, но мне нужны только таблицы с более чем одним триггером обновления. Этот запрос также возвращает таблицы с одним триггером вставки и одним обновлением, а это не то, что мне нужно.

SELECT * FROM sys.triggers
WHERE parent_id IN(SELECT parent_id
FROM sys.triggers
GROUP BY parent_id
HAVING COUNT(*)>1)

Ответы [ 2 ]

3 голосов
/ 27 ноября 2009

Вы должны быть в состоянии сказать это по sys.trigger_events, например:

SELECT *
  FROM sys.trigger_events AS te
  INNER JOIN sys.triggers AS t
  ON t.[object_id] = te.[object_id]
  WHERE te.[type] IN (1,2,3);

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

SELECT OBJECT_NAME(parent_id)
  FROM sys.triggers AS t
  INNER JOIN sys.trigger_events AS te
  ON t.[object_id] = te.[object_id]
  WHERE te.type_desc = 'UPDATE'
  GROUP BY OBJECT_NAME(parent_id)
  HAVING COUNT(*) > 1;
0 голосов
/ 27 ноября 2009

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

SELECT * FROM sys.triggers
WHERE parent_id IN
(SELECT parent_id
FROM sys.triggers tt
JOIN sys.syscomments sc on sc.id=tt.object_id
WHERE sc.text LIKE '%AFTER UPDATE%'
GROUP BY parent_id
HAVING COUNT(*)>1)
...