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

T-SQLを使用してSQLServerデータベース内のトリガーのリストを返す2つの方法

    GUIを使用する代わりに、T-SQLクエリを実行してSQL Serverデータベースを管理する場合は、現在のデータベース内のすべてのトリガーを一覧表示するための2つのオプションがあります。

    オプション1-sys.triggersカタログビュー

    sys.triggersを使用できます データベース内のすべてのトリガーのリストを取得するためのシステムカタログビュー。

    USE Test;
    SELECT 
      name,
      OBJECT_NAME(parent_id) AS parent,
      type,
      type_desc
    FROM sys.triggers;
    

    結果:

    +-------------------+----------+--------+-------------+
    | name              | parent   | type   | type_desc   |
    |-------------------+----------+--------+-------------|
    | t1_insert_trigger | t1       | TR     | SQL_TRIGGER |
    | t6ins             | t6       | TR     | SQL_TRIGGER |
    +-------------------+----------+--------+-------------+
    

    このビューは、タイプがTR(SQL DMLトリガー)またはTA(アセンブリ(CLR)DMLトリガー)のすべてのトリガーを返します。 DMLトリガー名とDDLトリガー名の両方を返します(DMLトリガーのみを返す次のオプションとは異なります)。

    オプション2–sys.objectsカタログビュー

    sys.objectsを使用することもできます トリガーのリストを取得するためのシステムカタログビュー。

    USE Test;
    SELECT
      SCHEMA_NAME(schema_id) AS [schema],
      name,
      OBJECT_NAME(parent_object_id) AS parent,
      type,
      type_desc
    FROM sys.objects
    WHERE type IN ('TR', 'TA');
    

    結果:

    +----------+-------------------+----------+--------+-------------+
    | schema   | name              | parent   | type   | type_desc   |
    |----------+-------------------+----------+--------+-------------|
    | dbo      | t1_insert_trigger | t1       | TR     | SQL_TRIGGER |
    | dbo      | t6ins             | t6       | TR     | SQL_TRIGGER |
    +----------+-------------------+----------+--------+-------------+
    

    sys.objectsに注意してください DMLトリガーのみを一覧表示し、DDLトリガーは一覧表示しません。

    これは、sys.objectsが原因です。 スキーマスコープのオブジェクトのみを返します。 DMLトリガー名はスキーマスコープですが、DDLトリガー名は親エンティティによってスコープされます。 DDLトリガーを返す必要がある場合は、sys.triggersを使用してください 。


    1. PostgreSQL:クエリの行数を「分単位」で実行

    2. postgresql:INSERT INTO ...(SELECT * ...)

    3. Windows Azure VMのパフォーマンスの比較、パート1

    4. Windows上のPython3でMySQLに接続するにはどうすればよいですか?