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

SQL Serverのsys.sql_modules、sys.system_sql_modules、およびsys.all_sql_modulesの違い

    SQL Serverでは、sys.sql_modulessys.system_sql_modules 、およびsys.all_sql_modules システムカタログビューは、SQLServerのSQL言語定義モジュールに関するメタデータを返します。

    ただし、それらの間には違いがあります。

    各ビューの正式な定義は次のとおりです。

    sys.sql_modules
    ネイティブにコンパイルされたスカラーユーザー定義関数を含む、SQLServerのSQL言語定義モジュールである各オブジェクトの行を返します。タイプP、RF、V、TR、FN、IF、TF、およびRのオブジェクトには、SQLモジュールが関連付けられています。スタンドアロンのデフォルトであるタイプDのオブジェクトにも、このビューにSQLモジュール定義があります。
    sys.system_sql_modules
    SQL言語定義モジュールを含むシステムオブジェクトごとに1行を返します。タイプFN、IF、P、PC、TF、Vのシステムオブジェクトには、SQLモジュールが関連付けられています。
    sys.all_sql_modules
    sys.sql_modulesの和集合を返します およびsys.system_sql_modules

    つまり、最後のビューは前の2つのビューの結果を組み合わせたものです(システムの両方を返します。 ユーザー定義モジュール)。

    これらのビューによって返される結果の違いを示す例を次に示します。

    USE Music;
    
    SELECT COUNT(*) AS sql_modules
    FROM sys.sql_modules;
    
    SELECT COUNT(*) AS system_sql_modules
    FROM sys.system_sql_modules;
    
    SELECT COUNT(*) AS all_sql_modules
    FROM sys.all_sql_modules;
    

    結果:

    +---------------+
    | sql_modules   |
    |---------------|
    | 9             |
    +---------------+
    (1 row affected)
    +----------------------+
    | system_sql_modules   |
    |----------------------|
    | 2020                 |
    +----------------------+
    (1 row affected)
    +-------------------+
    | all_sql_modules   |
    |-------------------|
    | 2029              |
    +-------------------+
    (1 row affected)
    

    この場合、このデータベースには9つのユーザー定義モジュールしかありません。残りはシステムモジュールからのものです。

    最初の2つのクエリの結果を合計すると、sys.all_sql_modulesと同じ結果が得られます。 :

    SELECT 
    (SELECT COUNT(*) FROM sys.sql_modules) +
    (SELECT COUNT(*) FROM sys.system_sql_modules)
    AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | 2029     |
    +----------+
    

    1. 非LOB列を更新する必要があるかどうかの確認

    2. ブールサポートOracleSQL

    3. OracleDatabaseでのPL/SQL一括収集の概要

    4. データベースの行数が多すぎますか?