Une des raisons courantes de l’interrogation des tables système de la géodatabase est la recherche de tous les éléments de la géodatabase liés à un jeu de données. Vous pouvez par exemple trouver le contenu d’un jeu de classes d’entités, trouver les classes d’entités qui font partie d’une topologie ou d’un réseau géométrique et trouver quels jeux de données sont inclus dans un réplica de la géodatabase. Comme tous les éléments et relations sont stockés dans les mêmes tables système, vous pouvez utiliser une seule requête pour tous ces cas en indiquant des littéraux de chaîne qui désignent l’élément à rechercher. Pour effectuer cette requête, procédez comme suit :
- Recherchez l'UUID de l'élément d'origine (un jeu de données d'entité par exemple).
- Recherchez toutes les relations avec l'UUID comme UUID d'origine.
- Pour chaque UUID de destination, trouvez l'élément correspondant et résolvez son type à l'aide de la table GDB_ItemTypes.
Vous trouverez ci-dessous une requête SQL intégrant toutes ces étapes dans une géodatabase dans Microsoft SQL Server. Pour modifier l’élément sur lequel porte la requête, changez les deux variables de chaîne déclarées au début.
--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
Dans le cas d’un jeu de classes d’entités, ceci renvoie une liste qui ressemble à ce que vous voyez lorsque vous parcourez un jeu de classes d’entités dans ArcCatalog. Elle peut contenir des classes d’entités, des classes de relations, ainsi que des jeux de données de contrôleur, tels que des topologies, des jeux de données réseau et des ateliers parcellaires. Elle peut également comporter des jeux de données qui n’apparaissent pas dans ArcCatalog, tels que les classes d’entités des zones à valider utilisées par les topologies.
Même si cela fonctionne bien pour les relations (des jeux de données dans un jeu de classes d’entités et des classes d’entités dans une topologie), une légère modification est nécessaire si vous essayez de trouver les éléments d’origine des relations en fonction d’un élément de destination précis. Ce type de navigation dans les relations inclut, par exemple, la recherche des jeux de données qui utilisent un domaine spécifique, la détermination du réplica de géodatabase auquel appartient un jeu de données de réplicas ou l’identification des jeux de données de contrôleur auxquels appartient une classe d’entités. Vous trouverez ci-dessous une version modifiée de la requête précédente, modifiée afin que les éléments associés puissent être trouvés par élément de destination et non par élément d'origine :
--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