Как получить список активных триггеров в базе данных?
Мое приложение основано на SQL-сервере db.
Все клиенты имеют тот же db, за исключением настроек.
Некоторые настройки включают в себя: новые таблицы, измененные таблицы, пользовательские представления, настраиваемые триггеры...
Когда я запускаю обновление программного обеспечения, выполняются некоторые скрипты. Теперь я вручную отключаю триггеры и повторно включаюсь после завершения сценариев.
В любом случае я бы хотел автоматически отключить все триггеры (которые включены, возможно, некоторые из них могут быть уже отключены), а затем снова их можно использовать в конце.
Не изобретать игру, как это сделать?
Как получить только активные триггеры на текущем db?
Как только я получу это, я могу программно создать и запустить
DISABLE TRIGGER triggername ON TABLENAME
ENABLE TRIGGER triggername ON TABLENAME
Ответы
Ответ 1
select objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled')
1 означает true, 0 означает false, очевидно,
Используйте запрос Jeff O и немного измените его
SELECT
TAB.name as Table_Name
, TRIG.name as Trigger_Name
, TRIG.is_disabled --or objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled')
FROM [sys].[triggers] as TRIG
inner join sys.tables as TAB
on TRIG.parent_id = TAB.object_id
или добавьте его как предложение where.
where TRIG.is_disabled = 0 -- or 1 depends on what you want
Ответ 2
SELECT *
FROM sys.triggers
WHERE is_disabled = 0
Ответ 3
SELECT
TAB.name as Table_Name
, TRIG.name as Trigger_Name
FROM [sys].[triggers] as TRIG
inner join sys.tables as TAB
on TRIG.parent_id = TAB.object_id
Ответ 4
SELECT
TAB.name as Table_Name,
TRIG.name as Trigger_Name,
Comments.Text TriggerText
FROM [sys].[triggers] as TRIG
Inner Join sys.tables as TAB on TRIG.parent_id = TAB.object_id
Inner Join syscomments Comments On TRIG.object_id = Comments.id
WHERE
TRIG.is_disabled = 0;
- полное решение
Ответ 5
select * from sys.triggers
Здесь object_id для таблицы, поэтому из объединения sys.table
вы можете получить имя таблицы
Ответ 6
Вы можете запросить представление sys.triggers.
Ответ 7
select so.name, text
from sysobjects so, syscomments sc
where type = 'TR'
and so.id = sc.id
and text like '%related_table_name%'
Ответ 8
Вот запрос, который возникает, когда вы обновляете "Триггеры базы данных" в SSMS.
SELECT
tr.name AS [Name],
'Server[@Name=' + quotename(CAST(
serverproperty(N'Servername')
AS sysname),'''') + ']' + '/Database[@Name=' + quotename(db_name(),'''') + ']' + '/DdlTrigger[@Name=' + quotename(tr.name,'''') + ']' AS [Urn],
tr.is_disabled AS [IsEnabled]
FROM
sys.triggers AS tr
WHERE
(tr.parent_class = 0)
ORDER BY
[Name] ASC
Используя это, я создал версию (которая улучшает принятый ответ), чтобы включить триггеры базы данных.
Обратите внимание на левое соединение и проверку COALESCE.
SELECT
COALESCE(TAB.name, 'DATABASE') as TargetObjectName
, TRIG.name as Trigger_Name
, TRIG.is_disabled --or objectproperty(object_id('TriggerName'), 'ExecIsTriggerDisabled')
-- select *
FROM [sys].[triggers] as TRIG
left join sys.tables as TAB
on TRIG.parent_id = TAB.object_id
WHERE
/* (TRIG.parent_class = 0) and */
TRIG.is_disabled = 0
Ответ 9
//Используем вашу базу данных
use [your_database_Name]
Select * from sys.triggers where is_disabled=0