地理数据库系统表通常用于查找所有与特定项目有关的项目。此类示例包括查找要素数据集的内容、查找参与拓扑或几何网络的要素类,以及查找包括在复本中的数据集。由于所有项目和关系都存储在相同的表中,因此单个查询可以用于所有这些情况(字符串文本确定使用哪个特定项目)。以下步骤可用于执行该查询:
- 查找起始项(例如要素数据集)的 UUID。
- 将该 UUID 用作起始 UUID 以查找所有关系。
- 对于每个目标 UUID,查找相应项目并使用 GDB_ItemTypes 表解析其类型。
以下是 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
有关 Oracle 使用的系统表和视图的详细信息,请参阅地理数据库系统表快速浏览的“地理数据库系统表中的 XML”部分。