示例:使用 SQL 将属性域编码解析为描述值

XML 列查询包括如何从编码值属性域中将编码和描述对作为结果集提取的示例。除简单方案调查之外,此功能的实际应用是解析数据集中的编码。

在许多情况下,编码值属性域中的编码都是随意分配的;例如,在管道材料的编码值属性域中,属性域的描述值可能是 Copper、PVC 和 Steel,而属性域的编码可以是 1、2 和 3,这对于在使用该属性域的表中执行 SQL 查询的用户用处不大。

以下示例显示如何在子查询中查询编码值属性域,然后将所得结果与查询使用该属性域的表所得出的结果进行连接。

第一个示例中,parcels 表(由用户 molly 所拥有)的 zoning 列使用 ZoningCodes 属性域。parcels 表与 ZoningCodes 编码值属性域连接,从而返回属性域编码和描述的列表。

--SQL Server

SELECT OBJECTID AS "Object ID",Value AS "Zoning Code"
FROM molly.parcels LEFT OUTER JOIN
 (SELECT
   codedValue.value('Code[1]','nvarchar(max)') AS "Code",
   codedValue.value('Name[1]', 'nvarchar(max)') AS "Value"
  FROM GDB_ITEMS AS items INNER JOIN GDB_ITEMTYPES AS itemtypes 
  ON items.Type = itemtypes.UUID
  CROSS APPLY items.Definition.nodes
   ('/GPCodedValueDomain2/CodedValues/CodedValue') AS CodedValues(codedValue)
  WHERE itemtypes.Name = 'Coded Value Domain' 
   AND items.Name = 'ZoningCodes') AS CodedValues
 ON molly.parcels.zoning = CodedValues.Code

在此例中,distribmains 表的 material 列使用 material 属性域。distribmains 表与 material 编码值属性域连接,从而返回属性域编码和描述的列表。

--Oracle

SELECT OBJECTID AS "Object ID", Value AS "Material"
FROM DISTRIBMAINS LEFT OUTER JOIN
 (SELECT
   EXTRACTVALUE(CodedValues.COLUMN_VALUE, 'CodedValue/Code') AS Code,
   EXTRACTVALUE(CodedValues.COLUMN_VALUE, 'CodedValue/Name') AS Value
  FROM SDE.GDB_ITEMS_VW items INNER JOIN SDE.GDB_ITEMTYPES itemtypes 
  ON items.Type = itemtypes.UUID,
  TABLE(XMLSEQUENCE(XMLType(Definition).Extract
   ('/GPCodedValueDomain2/CodedValues/CodedValue'))) CodedValues
  WHERE itemtypes.Name = 'Coded Value Domain' 
   AND items.Name = 'Material') CodedValues
 ON DISTRIBMAINS.MATERIAL = CodedValues.Code;


3/7/2012