Ein häufiger Grund für die Abfrage von Geodatabase-Systemtabellen ist die Suche nach Geodatabase-Elementen, die mit einem Dataset in Verbindung stehen. Dies umfasst beispielsweise das Suchen nach den Inhalten eines Feature-Datasets, das Ermitteln der an einer Topologie oder einem geometrischen Netzwerk beteiligten Feature-Classes sowie das Suchen nach Datasets, die in einem Geodatabase-Replikat enthalten sind. Da alle Elemente und Beziehungen in den gleichen Systemtabellen gespeichert werden, können Sie für alle genannten Fälle eine einzige Abfrage verwenden. Bestimmen Sie dazu das jeweilige Element mit Zeichenfolgenliteralen. Diese Abfrage kann mit folgenden Schritten ausgeführt werden:
- Suchen Sie die UUID des Ursprungselements (z. B. ein Feature-Dataset).
- Suchen Sie alle Beziehungen mit der UUID als Ursprungs-UUID.
- Suchen Sie für jede Ziel-UUID das entsprechende Element, und lösen Sie den Typ mithilfe der Tabelle "GDB_ItemTypes" auf.
Nachfolgend finden Sie eine SQL-Abfrage, die diese Schritte in eine Geodatabase in Microsoft SQL Server einfügt. Um das abgefragte Element zu ändern, ändern Sie die beiden Zeichenfolgenvariablen, die am Anfang deklariert wurden.
--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
Im Falle eines Feature-Datasets wird eine Liste mit einem ähnlichen Ergebnis wie beim Durchsuchen eines Feature-Datasets in ArcCatalog zurückgegeben. Diese kann Feature-Classes, Beziehungsklassen und Controller-Datasets wie Topologien, Netzwerk-Datasets und Parcel-Fabrics enthalten. Darüber hinaus enthält das Feature-Dataset möglicherweise einige Elemente, die nicht in ArcCatalog aufgeführt werden, z. B. die von Topologien verwendeten Feature-Classes nicht überprüfter Bereiche.
Dies funktioniert zwar für Beziehungen wie Datasets in Feature-Dataset und Feature-Classes in Topologie, allerdings ist eine geringfügige Änderung erforderlich, wenn Sie die Ursprungselemente von Beziehungen auf Grundlage eines bestimmten Zielelements suchen möchten. Beispiele für diese Art von Beziehungsnavigation: Herausfinden, welche Datasets eine bestimmte Domäne verwenden, zu welchem Replikat ein Replikat-Dataset gehört oder an welchen Controller-Datasets eine Feature-Class beteiligt ist. Nachfolgend finden Sie eine angepasste Version der vorherigen Abfrage, die so geändert wurde, dass in Beziehung stehende Elemente nach Zielelement statt nach Ursprungselement gesucht werden:
--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