SQL Serverでは、sys.sql_modules
、sys.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 | +----------+