Udostępnij za pośrednictwem


Uzyskiwanie informacji o wyzwalaczach DML

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

W tym temacie opisano sposób uzyskiwania informacji o wyzwalaczach DML w programie SQL Server przy użyciu programu SQL Server Management Studio lub Języka Transact-SQL. Te informacje mogą obejmować typy wyzwalaczy w tabeli, nazwę wyzwalacza, jego właściciela i datę utworzenia lub modyfikacji. Jeśli wyzwalacz nie został zaszyfrowany podczas jego tworzenia, uzyskasz definicję wyzwalacza. Możesz użyć definicji, aby zrozumieć, w jaki sposób wyzwalacz wpływa na tabelę, na której jest zdefiniowany. Ponadto można znaleźć obiekty używane przez określony wyzwalacz. Dzięki tym informacjom można zidentyfikować obiekty wpływające na wyzwalacz, jeśli zostaną zmienione lub usunięte w bazie danych.

w tym temacie

Przed rozpoczęciem

Bezpieczeństwo

Uprawnienia

sys.sql.modules, sys.object, sys.triggers, sys.events, sys.trigger_events
Widoczność metadanych w widokach katalogu jest ograniczona do obiektów, których właścicielem jest użytkownik lub w stosunku do których użytkownik ma jakieś uprawnienia. Aby uzyskać więcej informacji, zobacz Konfiguracja widoczności metadanych.

OBJECT_DEFINITION, OBJECTPROPERTY, sp_helptext
Wymaga członkostwa w publicznej roli . Definicja obiektów użytkownika jest widoczna dla właściciela obiektu lub nabywców uprawnień, którzy mają jedno z następujących uprawnień: ALTER, CONTROL, TAKE OWNERSHIP lub VIEW DEFINITION. Te uprawnienia są domyślnie przyznane członkom stałych ról bazy danych: db_owner, db_ddladminoraz db_securityadmin.

sys.sql_expression_dependencies
Wymaga uprawnienia WYŚWIETL DEFINICJĘ w bazie danych i uprawnienia SELECT dla sys.sql_expression_dependencies w bazie danych. Domyślnie uprawnienie SELECT jest przyznawane tylko członkom stałej roli bazy danych db_owner. Gdy uprawnienia SELECT i VIEW DEFINITION zostaną przyznane innemu użytkownikowi, odbiorca uprawnień może wyświetlić wszystkie zależności w bazie danych.

Korzystanie z programu SQL Server Management Studio

Aby wyświetlić definicję wyzwalacza DML

  1. W Eksploratorze obiektówpołącz się z instancją aparatu bazy danych, a następnie rozwiń tę instancję.

  2. Rozwiń bazę danych, którą chcesz, rozwiń tablicę Tabele, a następnie rozwiń tę tablicę, która zawiera wyzwalacz, dla którego chcesz wyświetlić definicję.

  3. Rozwiń Wyzwalacze, kliknij prawym przyciskiem myszy odpowiedni wyzwalacz, a następnie kliknij Modyfikuj. Definicja wyzwalacza DML jest wyświetlana w oknie zapytania.

Aby wyświetlić zależności wyzwalacza DML

  1. W Eksploratorze obiektów , połącz się z wystąpieniem silnika bazy danych, a następnie rozwiń to wystąpienie.

  2. Rozwiń bazę danych, którą chcesz, rozwiń Tabele, a następnie rozwiń tabelę zawierającą wyzwalacz i jego zależności, które chcesz wyświetlić.

  3. Rozwiń Wyzwalacze, kliknij prawym przyciskiem myszy odpowiedni wyzwalacz, a następnie kliknij przycisk Wyświetl zależności.

  4. W oknie Zależności obiektów, aby wyświetlić obiekty zależne od wyzwalacza DML, wybierz Obiekty, które zależą od nazwy wyzwalacza DML <>. Obiekty są wyświetlane w obszarze zależności .

    Aby wyświetlić obiekty, od których zależy DML, wybierz Obiekty, na których <nazwa wyzwalacza DML> zależy od. Obiekty są wyświetlane w obszarze zależności . Rozwiń każdy węzeł, aby wyświetlić wszystkie obiekty.

  5. Aby uzyskać informacje o obiekcie, który jest wyświetlany w obszarze zależności, kliknij obiekt. W polu wybranego obiektu informacje są przekazane w polach nazwa, typi typ zależności.

  6. Aby zamknąć okno zależności obiektów, kliknij przycisk OK.

Korzystanie z Transact-SQL

Aby wyświetlić definicję wyzwalacza DML

  1. Połącz się z silnikiem bazy danych.

  2. Na pasku standardowym kliknij pozycję Nowe zapytanie.

  3. Skopiuj i wklej jeden z poniższych przykładów w oknie zapytania, a następnie kliknij Wykonaj. W każdym przykładzie pokazano, jak można wyświetlić definicję wyzwalacza iuPerson.

USE AdventureWorks2022;  
GO  
SELECT definition   
FROM sys.sql_modules  
WHERE object_id = OBJECT_ID(N'Person.iuPerson');   
GO  
USE AdventureWorks2022;   
GO  
SELECT OBJECT_DEFINITION (OBJECT_ID(N'Person.iuPerson')) AS ObjectDefinition;   
GO  
  
USE AdventureWorks2022;   
GO  
EXEC sp_helptext 'Person.iuPerson'  
GO  
  

Aby wyświetlić zależności wyzwalacza DML

  1. Połącz się z silnikiem bazy danych.

  2. Na pasku Standardowa kliknij pozycję Nowe zapytanie.

  3. Skopiuj i wklej jeden z poniższych przykładów w oknie zapytania, a następnie kliknij Wykonaj. W każdym przykładzie pokazano, jak można wyświetlić zależności wyzwalacza iuPerson.

USE AdventureWorks2022;   
GO  
SELECT OBJECT_NAME(referencing_id) AS referencing_entity_name,   
    o.type_desc AS referencing_description,   
    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  
  

Aby wyświetlić informacje o wyzwalaczach DML w bazie danych

  1. Połącz się z silnikiem bazy danych.

  2. Na pasku standardowym kliknij pozycję Nowe zapytanie.

  3. Skopiuj i wklej jeden z poniższych przykładów w oknie zapytania, a następnie kliknij Wykonaj. W każdym przykładzie pokazano, jak można wyświetlać informacje o wyzwalaczach DML (TR) w bazie danych.

USE AdventureWorks2022;   
GO  
SELECT  name, parent_id, create_date, modify_date, is_instead_of_trigger  
FROM sys.triggers  
WHERE type = 'TR';   
GO  
  
USE AdventureWorks2022;   
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 AdventureWorks2022;   
GO  
SELECT OBJECTPROPERTY(OBJECT_ID(N'Person.iuPerson'), 'ExecIsInsteadOfTrigger');   
GO  
  

Aby wyświetlić informacje o zdarzeniach, które uruchamiają wyzwalacz DML

  1. Połącz się z silnikiem bazy danych.

  2. Na pasku standardowym kliknij pozycję Nowe zapytanie.

  3. Skopiuj i wklej jeden z poniższych przykładów w oknie zapytania, a następnie kliknij Wykonaj. W każdym przykładzie pokazano, jak można wyświetlić zdarzenia uruchamiające wyzwalacz iuPerson.

USE AdventureWorks2022;   
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 AdventureWorks2022;   
GO   
SELECT object_id, type,is_first, is_last  
FROM sys.trigger_events  
WHERE object_id = OBJECT_ID('Person.iuPerson');   
GO  

Zobacz też

CREATE TRIGGER (Transact-SQL)
WYZWALACZ DROP (Transact-SQL)
WŁĄCZ WYZWALACZ (Transact-SQL)
WYŁĄCZ WYZWALACZ (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_modules (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)