T-SQLをしばらく使用している場合は、sys.objects
に遭遇した可能性があります。 システムカタログビュー。データベース内のユーザー定義のスキーマスコープのオブジェクトを返します。
しかし、あなたが気づいているかもしれないし、気づいていないかもしれない他の2つの同様の見解があります。 sys.system_objects
およびsys.all_objects
。
似ていますが、違いは明らかで、名前から違いがわかります。 3つのビューすべての公式定義は次のとおりです。
-
sys.objects
- データベース内に作成された、ユーザー定義のスキーマスコープのオブジェクトごとの行が含まれます。
-
sys.system_objects
- SQLServerに含まれるすべてのスキーマスコープのシステムオブジェクトに対して1つの行が含まれます。
-
sys.all_objects
-
UNION
を表示します スキーマスコープのすべてのユーザー定義オブジェクトとシステムオブジェクトの。
つまり、最後のビューは前の2つのビューの結果を組み合わせたものです(システムとの両方を返します。 ユーザー定義オブジェクト)。
例
これらのビューによって返される結果の違いを示す例を次に示します。
USE WideWorldImportersDW; SELECT COUNT(*) AS [sys.objects] FROM sys.objects; SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects; SELECT COUNT(*) AS [sys.all_objects] FROM sys.all_objects; SELECT (SELECT COUNT(*) AS [sys.all_objects] FROM sys.all_objects) - (SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects) AS [sys.all_objects MINUS sys.system_objects];
結果:
+---------------+ | sys.objects | |---------------| | 224 | +---------------+ (1 row affected) +----------------------+ | sys.system_objects | |----------------------| | 2205 | +----------------------+ (1 row affected) +-------------------+ | sys.all_objects | |-------------------| | 2429 | +-------------------+ (1 row affected)
これらのビューは、ここにリストするには行が多すぎるため、COUNT()
を使用しています。 それぞれが返す行数を返します。
数学が得意な場合は、sys.all_objects
の数がすぐにわかります。 sys.objects
の合計です およびsys.system_objects
。
これがその追加を行うクエリです。
SELECT (SELECT COUNT(*) AS [sys.objects] FROM sys.objects) + (SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects) AS [sys.objects PLUS sys.system_objects];
結果:
+---------------------------------------+ | sys.objects PLUS sys.system_objects | |---------------------------------------| | 2429 | +---------------------------------------+
カタログビューでのメタデータの表示は、ユーザーが所有しているか、ユーザーに何らかの権限が付与されているセキュリティ保護可能なものに限定されていることに注意してください。