Поделиться через


Получение сведений о триггерах DML

В этом разделе описывается получение сведений о триггерах DML в SQL Server 2012 с помощью среды Среда SQL Server Management Studio или Transact-SQL. К таким сведениям относятся типы триггеров для таблицы, имя триггера, владелец триггера и дата создания или изменения триггера. Если триггер не был зашифрован во время создания, то можно получить его определение. По определению вы можете понять, каким образом триггер влияет на таблицу, для которой он определен. Кроме того, можно определить, какие объекты используются данным триггером. Эти сведения могут быть использованы для выявления объектов, которые воздействуют на триггер, если они изменяются или удаляются из базы данных.

В этом разделе

  • Перед началом работы выполните следующие действия.

    Безопасность

  • Для получения сведений о триггерах DML используется:

    Среда SQL Server Management Studio

    Transact-SQL

Перед началом

Безопасность

Разрешения

  • sys.sql.modules, sys.object, sys.triggers, sys.events, sys.trigger_events
    Видимость метаданных в представлениях каталогов ограничивается защищаемыми объектами, которыми пользователь владеет или на которые ему были предоставлены разрешения. Дополнительные сведения см. в разделе Настройка видимости метаданных.

  • OBJECT_DEFINITION, OBJECTPROPERTY, sp_helptext
    Необходимо членство в роли public. Определения пользовательских объектов видимы владельцу объекта или участникам, которым предоставлены следующие разрешения: ALTER, CONTROL, TAKE OWNERSHIP или VIEW DEFINITION. Эти разрешения неявно предоставляются членам предопределенных ролей базы данных db_owner, db_ddladmin и db_securityadmin.

  • sys.sql_expression_dependencies
    Необходимо разрешение VIEW DEFINITION в базе данных и разрешение SELECT на представление sys.sql_expression_dependencies в базе данных. По умолчанию разрешение SELECT предоставляется только членам предопределенной роли базы данных db_owner. Если разрешения SELECT и VIEW DEFINITION предоставлены другому пользователю, он может просматривать все зависимости в базе данных.

Значок стрелки, используемый со ссылкой «В начало»[Top]

Использование среды SQL Server Management Studio

Просмотр определения триггера DML

  1. В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.

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

  3. Разверните узел Триггеры, щелкните правой кнопкой мыши нужный триггер и выберите команду Изменить. В окне запроса появится определение триггера DML.

Просмотр зависимостей триггера DML

  1. В обозревателе объектов подключитесь к экземпляру компонента Компонент Database Engine и разверните его.

  2. Разверните нужную базу данных, разверните узел Таблицы, а затем разверните таблицу, содержащую триггер и зависимости, которые нужно просмотреть.

  3. Разверните узел Триггеры, щелкните правой кнопкой мыши нужный триггер и выберите команду Просмотреть зависимости.

  4. В окне Зависимости объекта выберите пункт Объекты, зависящие от <имя триггера DML>, чтобы просмотреть объекты, зависящие от триггера DML. Объекты отображаются в области Зависимости.

    Чтобы просмотреть объекты, от которых зависит триггер DML, выберите пункт Объекты, от которых зависит <имя триггера DML>. Объекты отображаются в области Зависимости. Разверните каждый узел, чтобы просмотреть все объекты.

  5. Чтобы получить сведения об объекте, который появляется в области Зависимости, щелкните его. В поле Выбранный объект сведения указываются в полях Имя, Тип и Тип зависимости.

  6. Нажмите кнопку ОК, чтобы закрыть окно Зависимости объекта.

Значок стрелки, используемый со ссылкой «В начало»[Top]

Использование Transact-SQL

Просмотр определения триггера DML

  1. Подключитесь к компоненту Компонент Database Engine.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте и вставьте один из следующих примеров в окно запроса и нажмите кнопку Выполнить. В каждом примере показано, как можно просмотреть определение триггера iuPerson.

USE AdventureWorks2012;
GO
SELECT definition 
FROM sys.sql_modules
WHERE object_id = OBJECT_ID(N'Person.iuPerson'); 
GO

USE AdventureWorks2012; 
GO
SELECT OBJECT_DEFINITION (OBJECT_ID(N'Person.iuPerson')) AS ObjectDefinition; 
GO

USE AdventureWorks2012; 
GO
EXEC sp_helptext 'Person.iuPerson'
GO

Просмотр зависимостей триггера DML

  1. Подключитесь к компоненту Компонент Database Engine.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте и вставьте один из следующих примеров в окно запроса и нажмите кнопку Выполнить. В каждом примере показано, как можно просмотреть зависимости триггера iuPerson.

USE AdventureWorks2012; 
GO
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name, 
    o.type_desc AS referencing_desciption, 
    COALESCE(COL_NAME(referencing_id, referencing_minor_id), '(n/a)') AS referencing_minor_id, 
    referencing_class_desc, referenced_class_desc, 
    referenced_server_name, referenced_database_name, referenced_schema_name, 
    referenced_entity_name, 
    COALESCE(COL_NAME(referenced_id, referenced_minor_id), '(n/a)') AS referenced_column_name, 
    is_caller_dependent, is_ambiguous
FROM sys.sql_expression_dependencies AS sed
INNER JOIN sys.objects AS o ON sed.referencing_id = o.object_id
WHERE referencing_id = OBJECT_ID(N'Person.iuPerson'); 
GO

Просмотр сведений о триггерах DML в базе данных

  1. Подключитесь к компоненту Компонент Database Engine.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте и вставьте один из следующих примеров в окно запроса и нажмите кнопку Выполнить. В каждом примере показано, как можно просмотреть сведения о триггерах DML (TR) в базе данных.

USE AdventureWorks2012; 
GO
SELECT  name, parent_id, create_date, modify_date, is_instead_of_trigger
FROM sys.triggers
WHERE type = 'TR'; 
GO

USE AdventureWorks2012; 
GO
SELECT  name, object_id, schema_id, parent_object_id, type_desc, create_date, modify_date, is_published
FROM sys.objects
WHERE type = 'TR'; 
GO

USE AdventureWorks2012; 
GO
SELECT OBJECTPROPERTY(OBJECT_ID(N'Person.iuPerson'), 'ExecIsInsteadOfTrigger'); 
GO

Просмотр сведений о событиях, которые вызывают срабатывание триггера DML

  1. Подключитесь к компоненту Компонент Database Engine.

  2. На стандартной панели выберите пункт Создать запрос.

  3. Скопируйте и вставьте один из следующих примеров в окно запроса и нажмите кнопку Выполнить. В каждом примере показано, как можно просмотреть события, которые вызывают срабатывание триггера iuPerson.

USE AdventureWorks2012; 
GO
SELECT object_id, type, type_desc, is_trigger_event, event_group_type, event_group_type_desc 
FROM sys.events
WHERE object_id = OBJECT_ID('Person.iuPerson'); 
GO

USE AdventureWorks2012; 
GO SELECT object_id, type,is_first, is_last
FROM sys.trigger_events
WHERE object_id = OBJECT_ID('Person.iuPerson'); 
GO

Значок стрелки, используемый со ссылкой «В начало»[Top]

См. также

Справочник

CREATE TRIGGER (Transact-SQL)

DROP TRIGGER (Transact-SQL)

ENABLE TRIGGER (Transact-SQL)

DISABLE TRIGGER (Transact-SQL)

EVENTDATA (Transact-SQL)

sp_rename (Transact-SQL)

ALTER TRIGGER (Transact-SQL)

sp_help (Transact-SQL)

sp_helptrigger (Transact-SQL)

sys.triggers (Transact-SQL)

sys.trigger_events (Transact-SQL)

sys.sql_modules (Transact-SQL)

sys.assembly_references (Transact-SQL)

sys.server_triggers (Transact-SQL)

sys.server_trigger_events (Transact-SQL)

sys.server_sql_modules (Transact-SQL)

sys.server_assembly_modules (Transact-SQL)

OBJECTPROPERTY (Transact-SQL)

OBJECT_DEFINITION (Transact-SQL)