Beispiel: Abfragen von Spalten des Typs XML
Die folgende Abfrage schließt Spalten vom Typ xml ein. Die Abfrage ruft die Produktmodell-ID, den Namen und die Produktionsschritte am ersten Standort aus der Instructions-Spalte vom Typ xml ab.
Beispiel:
USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name,
Instructions.query('
declare namespace MI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"
/MI:root/MI:Location[1]/MI:step
')
FROM Production.ProductModel
FOR XML RAW ('ProductModelData')
GO
Im Folgenden wird das Ergebnis gezeigt. Beachten Sie, dass die Tabelle nur für einige Produktmodelle Fertigungsanweisungen speichert. Die Fertigungsschritte werden als Unterelemente des <ProductModelData>-Elements im Ergebnis zurückgegeben.
<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>
Wenn in der Abfrage ein Spaltenname für die durch die XQuery-Abfrage zurückgegebenen XML-Daten angegeben wird (wie in der folgenden SELECT-Anweisung angegeben), werden die Produktionsschritte von dem Element umschlossen, das den angegebenen Namen aufweist.
USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name,
Instructions.query('
declare namespace MI="https://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
Dies ist das Ergebnis:
<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>
In der folgenden Abfrage wird die ELEMENTS-Direktive angegeben. Deshalb ist das zurückgegebene Ergebnis elementzentriert. Die Option XSINIL, die zusammen mit der ELEMENTS-Direktive angegeben wird, gibt selbst dann <ManuSteps>-Elemente zurück, wenn die entsprechende Spalte im Rowset NULL ist.
USE AdventureWorks2008R2;
GO
SELECT ProductModelID, Name,
Instructions.query('
declare namespace MI="https://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
Dies ist das Ergebnis:
<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>