Пример. Запрос столбцов XMLType
Область применения: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
В следующий запрос включены столбцы типа xml . Запрос возвращает идентификатор модели продукта, имя и шаги производства в первом месте из столбца Instructions
типа xml .
Пример
USE AdventureWorks2022;
GO
SELECT ProductModelID, Name,
Instructions.query('
declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/MI:root/MI:Location[1]/MI:step')
FROM Production.ProductModel
FOR XML RAW ('ProductModelData')
GO
Ниже показан результат. В таблице хранятся инструкции по производству только для некоторых моделей продуктов. Производственные шаги возвращаются в виде подэлементов <ProductModelData>
элемента в результате.
<ProductModelData ProductModelID="5" Name="HL Mountain Frame" />
<ProductModelData ProductModelID="6" Name="HL Road Frame" />
<ProductModelData ProductModelID="7" Name="HL Touring Frame">
<MI:step> ... </MI:step>
<MI:step> ... </MI:step>
</ProductModelData>
Если в запросе задано имя столбца для XML-документа, возвращаемого XQuery, так как это задано в следующей инструкции SELECT
, то шаги производства помещаются в элемент, имеющий указанное имя.
USE AdventureWorks2022;
GO
SELECT ProductModelID, Name,
Instructions.query('
declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/MI:root/MI:Location[1]/MI:step') as ManuSteps
FROM Production.ProductModel
FOR XML RAW ('ProductModelData');
GO
Результат:
<ProductModelData ProductModelID="5" Name="HL Mountain Frame" />
<ProductModelData ProductModelID="6" Name="HL Road Frame" />
<ProductModelData ProductModelID="7" Name="HL Touring Frame">
<ManuSteps>
<MI:step ... </MI:step>
<MI:step ... </MI:step>
</ManuSteps>
</ProductModelData>
В следующем запросе задана директива ELEMENTS
. Поэтому результат будет состоять из элементов. Параметр XSINIL
, указанный в директиве ELEMENTS
, возвращает <ManuSteps>
элементы, даже если соответствующий столбец в наборе строк имеет значение NULL.
USE AdventureWorks2022;
GO
SELECT ProductModelID, Name,
Instructions.query('
declare namespace MI="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
/MI:root/MI:Location[1]/MI:step
') as ManuSteps
FROM Production.ProductModel
FOR XML RAW ('ProductModelData'), root('MyRoot'), ELEMENTS XSINIL
GO
Результат:
<MyRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
...
<ProductModelData>
<ProductModelID>6</ProductModelID>
<Name>HL Road Frame</Name>
<ManuSteps xsi:nil="true" />
</ProductModelData>
<ProductModelData>
<ProductModelID>7</ProductModelID>
<Name>HL Touring Frame</Name>
<ManuSteps>
<MI:step ... </MI:step>
<MI:step ...</MI:step>
...
</ManuSteps>
</ProductModelData>
</MyRoot>