При работе с системными таблицами базы геоданных часто бывает необходимо определить все элементы, связанные с набором данных. К таким примерам можно отнести определение содержания набора классов объектов, поиск классов объектов, участвующих в топологии или геометрической сети и поиск наборов данных, входящих в реплику. Поскольку все элементы и отношения хранятся в одних и тех же системных таблицах, во всех этих случаях можно использовать простой запрос (с использованием строковых значений, определяющих конкретный элемент). Для создания такого запроса выполните следующие шаги:
- Найдите UUID исходного элемента (например, набора классов объектов).
- Определите все отношения с UUID, соответствующим данному UUID.
- Для каждого целевого UUID определите соответствующий элемент и тип с помощью таблицы GDB_ItemTypes.
Ниже приведен пример SQL-запроса, выполняющего все эти шаги в базе геоданных в Microsoft SQL Server. Чтобы изменить элемент к которому строится запрос, измените обе строчные переменные, указанные в начале.
--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