sql >> データベース >  >> RDS >> Sqlserver

sys.trigger_event_typesを使用して、SQLServerのトリガーイベントタイプを一覧表示します

    SQL Serverでは、sys.trigger_event_typesを使用できます。 トリガーが発生する可能性のあるすべてのイベントまたはイベントグループを返します。

    例1-小さなサンプル

    ここでは、TOP()を使用します ビューから最初の10行を返す句。

    SELECT TOP(10) * 
    FROM sys.trigger_event_types;
    

    結果:

    +--------+-------------------+---------------+
    | type   | type_name         | parent_type   |
    |--------+-------------------+---------------|
    | 21     | CREATE_TABLE      | 10018         |
    | 22     | ALTER_TABLE       | 10018         |
    | 23     | DROP_TABLE        | 10018         |
    | 24     | CREATE_INDEX      | 10020         |
    | 25     | ALTER_INDEX       | 10020         |
    | 26     | DROP_INDEX        | 10020         |
    | 27     | CREATE_STATISTICS | 10021         |
    | 28     | UPDATE_STATISTICS | 10021         |
    | 29     | DROP_STATISTICS   | 10021         |
    | 34     | CREATE_SYNONYM    | 10022         |
    +--------+-------------------+---------------+
    

    すべての行を選択すると、SQL Server 2017を使用すると284になり、SQLServer2019で291になります。

    例2–親を取得する

    sys.trigger_event_typesの結果をよく見ると 、DDLトリガーイベントが階層的であることがわかります。

    CREATE_TABLEの階層を示す例を次に示します。 イベントをトリガーします。

    WITH event_types(Type, Type_Name, Parent_Type, Level) AS (
        SELECT type,
               type_name,
               parent_type, 
               1 AS level
        FROM sys.trigger_event_types
        WHERE type_name = 'CREATE_TABLE'
    
        UNION ALL
    
        SELECT tet.type,
               tet.type_name,
               tet.parent_type, 
               et.level + 1 AS level
        FROM event_types AS et
        JOIN sys.trigger_event_types AS tet
            ON et.parent_type = tet.type
    )
    
    SELECT 
      Type,
      Type_name,
      Parent_Type
    FROM event_types
    ORDER BY level DESC;
    

    結果:

    +--------+---------------------------+---------------+
    | Type   | Type_name                 | Parent_Type   |
    |--------+---------------------------+---------------|
    | 10001  | DDL_EVENTS                | NULL          |
    | 10016  | DDL_DATABASE_LEVEL_EVENTS | 10001         |
    | 10017  | DDL_TABLE_VIEW_EVENTS     | 10016         |
    | 10018  | DDL_TABLE_EVENTS          | 10017         |
    | 21     | CREATE_TABLE              | 10018         |
    +--------+---------------------------+---------------+
    

    DDL_EVENTSであることがわかります 階層の最上位にあり、その後にDDL_DATABASE_LEVEL_EVENTSが続きます。 、など、CREATE_TABLEに到達するまで 。

    それを視覚化する別の方法は次のようになります:

    DDL_EVENTS > DDL_DATABASE_LEVEL_EVENTS > DDL_TABLE_VIEW_EVENTS > DDL_TABLE_EVENTS > CREATE_TABLE
    

    CREATE_TABLEを置き換えることができます 他のイベントタイプを使用したクエリで、その階層を確認します。

    トリガーイベントタイプの階層リストを返すには、SQLServerでトリガーイベントタイプの階層リストを返すクエリも参照してください。


    1. MySQLエラー#1071-指定されたキーが長すぎました。キーの最大長は767バイトです

    2. パフォーマンスの驚きと仮定:任意のTOP 1

    3. MySQLでは、数字を引用する必要がありますか?

    4. OracleでASCII値を取得する方法は?