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

SQLServerのトリガーイベントタイプの階層リストを返すクエリ

    SQL Serverでは、次のT-SQLクエリを使用して、トリガーイベントタイプの階層リストを返すことができます。

    これらの例は、sys.trigger_event_typesにクエリを実行します ビュー。トリガーを起動できる各イベントまたはイベントグループの行を返します。

    例1-すべての行を返す

    このクエリは、sys.trigger_event_typesのすべての行を返します ビュー。

    WITH event_types(Type, Type_Name, Parent_Type, Level, Sort) AS   
    (  
        SELECT 
          tet.type, 
          tet.type_name, 
          tet.parent_type, 
          1 AS Level,
          CONVERT(nvarchar(255), tet.type_name)
        FROM sys.trigger_event_types tet
        WHERE parent_type IS NULL
        UNION ALL  
        SELECT tet.type,
               CONVERT(nvarchar(64), REPLICATE('|    ' , Level) + tet.type_name),
               tet.parent_type,
               Level + 1,
               CONVERT(nvarchar(255), RTRIM(Sort) + ' > ' + tet.type_name)
        FROM sys.trigger_event_types AS tet
            INNER JOIN event_types AS et
            ON et.type = tet.parent_type
    )  
    SELECT Type_Name
    FROM event_types
    ORDER BY Sort;
    

    このクエリは、SQL Server 2017環境で284行、SQLServer2019環境で291行を返します。

    例2–単一のイベントタイプを返す

    前のクエリを変更して、ブレッドクラムスタイルでリストされた特定のイベントタイプを返すようにすることができます。

    CREATE_TABLEを返す例を次に示します。 ブレッドクラムスタイルのイベントタイプ:

    WITH event_types(Type, Type_Name, Parent_Type, Level, Sort) AS   
    (  
        SELECT 
          tet.type, 
          tet.type_name, 
          tet.parent_type, 
          1 AS Level,
          CONVERT(nvarchar(255), tet.type_name)
        FROM sys.trigger_event_types tet
        WHERE parent_type IS NULL
        UNION ALL  
        SELECT tet.type,
               CONVERT(nvarchar(64), REPLICATE('|    ' , Level) + tet.type_name),
               tet.parent_type,
               Level + 1,
               CONVERT(nvarchar(255), RTRIM(Sort) + ' > ' + tet.type_name)
        FROM sys.trigger_event_types AS tet
            INNER JOIN event_types AS et
            ON et.type = tet.parent_type
    )  
    SELECT Sort AS [Result]
    FROM event_types
    WHERE RIGHT(Sort, 12) = 'CREATE_TABLE';
    

    結果:

    +--------------------------------------------------------------------------------------------------+
    | Result                                                                                           |
    |--------------------------------------------------------------------------------------------------|
    | DDL_EVENTS > DDL_DATABASE_LEVEL_EVENTS > DDL_TABLE_VIEW_EVENTS > DDL_TABLE_EVENTS > CREATE_TABLE |
    +--------------------------------------------------------------------------------------------------+
    

    1. 実行時にユーザーから入力を取得する方法

    2. oracleblobテキスト検索

    3. MySQLに行を挿入するためのクエリの挿入

    4. 1で始まるように、1次元配列の配列添え字を正規化します。