オブジェクト定義の表示

データベース オブジェクトの Transact-SQL ソース コードの表示には、メタデータの表示よりも厳しいルールが設けられています。オブジェクトの Transact-SQL 定義を参照するには、そのオブジェクトの所有者であるか、そのオブジェクトに対して次の権限のいずれかが許可されている必要があります。

  • CONTROL

  • ALTER

  • TAKE OWNERSHIP

  • VIEW DEFINITION

次に、これらのルールがどのように機能するかを示す例をいくつか示します。

  • myTable テーブルに対する ALTER 権限が許可されている場合は、次の表に示す各カタログ ビューの definition 列で、このテーブルに関連したサブコンポーネントの Transact-SQL 定義を表示できます。上記のいずれの権限もなく、オブジェクトの所有者でもない場合は、カタログ ビューの definition 列の Transact-SQL 定義は NULL になります。

  • ユーザーが myTable のテーブル所有者ではなく、このテーブルに対して SELECT 権限しか許可されていない場合、次のカタログ ビューにアクセスすると、definition 列は NULL になります。

    カタログ ビュー名

    Transact-SQL 定義の対象

    sys.sql_modules

    myTable のすべてのトリガ

    sys.computed_columns

    myTable のすべての計算列

    sys.check_constraints

    myTable のすべての CHECK 制約

    sys.default_constraints

    myTable のすべての DEFAULT 制約

  • myProcedure プロシージャに対する EXECUTE 権限が許可されている場合を考えてみます。sys.sql_modules カタログ ビューにアクセスして、プロシージャの Transact-SQL 定義を表示しようとした場合、definition 列は NULL 値になります。逆に、myProcedure の TAKE OWNERSHIP 権限が許可されている場合は、sys.sql_modulesdefinition 列に、プロシージャの Transact-SQL 定義が表示されます。