ジオデータベース システム テーブルを検索する一般的な理由は、データセットに関連するすべてのジオデータベース アイテムを検索することです。この例としては、フィーチャ データセットのコンテンツの検索、トポロジまたはジオメトリック ネットワークに参加するフィーチャクラスの検索、ジオデータベースのレプリカに含まれるデータセットの検索などが挙げられます。すべてのアイテムとリレーションシップは同じシステム テーブル内に格納されているため、検索するアイテムを指定する文字列リテラルを入力することによって、これらすべての場合に対して 1 つのクエリを使用できます。この検索は、次の手順で実行できます。
- 元のアイテムの (フィーチャ データセットなど) の UUID を検索します。
- UUID を元の UUID として使用して、すべてのリレーションシップを検索します。
- それぞれの関連先 UUID について、対応するアイテムを検索し、GDB_ItemTypes テーブルを使用してそのタイプを解決します。
以下は、Microsoft SQL Server 内のジオデータベースでの、これらすべての手順を組み込んだ SQL クエリです。検索されるアイテムを変更するには、最初に宣言されている両方の文字列変数を変更します。
--Queries a dbo-schema geodatabase in SQL Server
DECLARE @ORIGIN nvarchar(max);
DECLARE @ORIGIN_TYPE nvarchar(max);
SET @ORIGIN = 'Montgomery.Sasha.Landbase';
SET @ORIGIN_TYPE = 'Feature Dataset';
SELECT
DEST_ITEMS.Name AS "Name"
DEST_TYPES.Name AS "Type"
FROM
-- Get the unique ID of the origin item.
((((SELECT UUID, Type FROM dbo.GDB_ITEMS WHERE Name = @ORIGIN) AS src_items
INNER JOIN
(SELECT UUID FROM dbo.GDB_ITEMTYPES WHERE Name = @ORIGIN_TYPE) AS src_types
ON src_items.Type = src_types.UUID)
--Get the UUIDs of related items.
INNER JOIN
dbo.GDB_ITEMRELATIONSHIPS AS relationships
ON src_items.UUID = relationships.OriginID)
-- Resolve the names of the destination items.
INNER JOIN
dbo.GDB_ITEMS AS dest_items
ON relationships.DestID = dest_items.UUID)
-- Get the types as human-readable strings.
INNER JOIN
dbo.GDB_ITEMTYPES AS dest_types
ON dest_items.Type = dest_types.UUID
フィーチャ データセットの場合、これは ArcCatalog 内のフィーチャ データセットを参照する場合と似たリストを返します。リストには、フィーチャクラス、リレーションシップ クラス、およびトポロジ、ネットワーク データセット、パーセル ファブリックなどのコントローラー データセットが含まれます。また、このフィーチャ データセットには、トポロジが使用するダーティ エリア フィーチャクラスなど、ArcCatalog に表示されないアイテムが含まれる場合もあります。
これは、フィーチャ データセット内のデータセットや、トポロジ内のフィーチャクラスなどのリレーションシップに対してうまく機能しますが、特定の関連先アイテムに基づきリレーションシップの元のアイテムを検索する場合は、少し変更する必要があります。このタイプのリレーションシップ操作の例としては、特定のドメインを使用するデータセットの検索、レプリカ データセットが属しているジオデータベースのレプリカの特定、フィーチャクラスが参加しているコントローラー データセットの識別などが挙げられます。以下は、前のクエリの修正バージョンです。元のアイテムではなく関連先アイテムを使用して、関連アイテムを検索できるように変更されています。
--Queries a dbo-schema geodatabase in SQL Server
DECLARE @DEST nvarchar(max);
DECLARE @DEST_TYPE nvarchar(max);
SET @DEST = 'Angle';
SET @DEST_TYPE = 'Range Domain';
SELECT
SRC_ITEMS.Name AS "Name",
SRC_TYPES.Name AS "Type"
FROM
-- Get the unique ID of the destination item.
((((SELECT UUID, Type FROM dbo.GDB_ITEMS WHERE Name = @DEST) AS dest_items
INNER JOIN
(SELECT UUID FROM dbo.GDB_ITEMTYPES WHERE Name = @DEST_TYPE) AS dest_types
ON dest_items.Type = dest_types.UUID)
-- Get the UUIDs of related items.
INNER JOIN
dbo.GDB_ITEMRELATIONSHIPS AS relationships
ON dest_items.UUID = relationships.DestID)
-- Resolve the names of the origin items.
INNER JOIN
dbo.GDB_ITEMS AS src_items
ON relationships.OriginID = src_items.UUID)
-- Get the types as human-readable strings.
INNER JOIN
dbo.GDB_ITEMTYPES AS src_types
ON src_items.Type = src_types.UUID