Un motivo común por el que desearía hacer consultas en las tablas de sistema de la geodatabase es encontrar todos los elementos de la geodatabase que están relacionados con un dataset. Algunos ejemplos de ello son encontrar el contenido de un dataset de entidades, encontrar qué clases de entidades participan en una topología o una red geométrica y determinar qué datasets están incluidos en una réplica de una geodatabase. Dado que todos los elementos y relaciones están almacenados en las mismas tablas de sistema, es posible usar una sola consulta para todos estos casos al proporcionar cadenas literales para designar a cada elemento de la consulta. Los siguientes pasos se pueden utilizar para realizar esta consulta:
- Buscar el UUID del elemento de origen (como un dataset de entidades).
- Buscar todas las relaciones con el UUID como el UUID de origen.
- Para cada UUID de destino, busque el elemento correspondiente y resuelva el tipo con la tabla GDB_ItemTypes.
A continuación, se muestra una consulta SQL que incorpora todos estos pasos en una geodatabase de Microsoft SQL Server. Para cambiar el elemento que se desea consultar, modifique las dos variables de cadena declaradas al principio.
--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
En el caso de un dataset de entidades, devuelve una lista similar a la que vería al examinar un dataset de entidades en ArcCatalog; podría contener clases de entidades, clases de relación y dataset de controlador, tales como topologías, datasets de red y estructuras de parcelas. Además, el dataset de entidades podría contener ciertos elementos que no aparecen en ArcCatalog, por ejemplo, las clases de entidades de área sin validar empleadas en las topologías.
Aunque esta posibilidad funciona bien para relaciones tales como los datasets de un dataset de entidades y las clases de entidades de una topología, se requiere una leve modificación si se desea encontrar los elementos de origen de las relaciones basándose en un elemento de destino específico. Algunos ejemplos de este tipo de navegación de relaciones son determinar qué datasets utilizan un dominio específico, determinar a qué réplica de geodatabase pertenece un dataset de réplica o identificar los datasets de controlador en los que participa una clase de entidad. La siguiente es una versión modificada de la consulta anterior, que se cambió para que el elemento de destino, en lugar del elemento de origen, pueda encontrar los elementos relacionados:
--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