Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server-
Retourneert de getypte waarde voor elk item dat is opgegeven door $arg.
Syntaxis
fn:data ($arg as item()*) as xdt:untypedAtomic*
Argumenten
$arg
Reeks items waarvan de getypte waarden worden geretourneerd.
Opmerkingen
De volgende overwegingen zijn van toepassing op getypte waarden:
De getypte waarde van een atomische waarde is de atomische waarde.
De getypte waarde van een tekstknooppunt is de tekenreekswaarde van het tekstknooppunt.
De getypte waarde van een opmerking is de tekenreekswaarde van de opmerking.
De getypte waarde van een verwerkingsinstructie is de inhoud van de verwerkingsinstructie, zonder de doelnaam van de verwerkingsinstructie.
De getypte waarde van een documentknooppunt is de tekenreekswaarde.
De volgende overwegingen zijn van toepassing op kenmerk- en elementknooppunten:
Als een kenmerkknooppunt is getypt met een XML-schematype, is de getypte waarde de getypte waarde dienovereenkomstig.
Als het kenmerkknooppunt niet is getypt, is de getypte waarde gelijk aan de tekenreekswaarde die wordt geretourneerd als een exemplaar van
xdt:untypedAtomic.Als het elementknooppunt niet is getypt, is de getypte waarde gelijk aan de tekenreekswaarde die wordt geretourneerd als een exemplaar van
xdt:untypedAtomic.
De volgende overwegingen zijn van toepassing op getypte elementknooppunten:
Als het element een eenvoudig inhoudstype heeft,
data()wordt de getypte waarde van het element geretourneerd.Als het knooppunt van een complex type is, inclusief xs:anyType,
data()wordt een statische fout geretourneerd.
Hoewel het gebruik van de data() functie vaak optioneel is, zoals wordt weergegeven in de volgende voorbeelden, verhoogt het opgeven van de functie expliciet de leesbaarheid van query's data() . Zie XQuery Basicsvoor meer informatie.
U kunt niet opgeven data() voor samengestelde XML, zoals wordt weergegeven in het volgende voorbeeld:
DECLARE @x AS XML;
SET @x = '';
SELECT @x.query('data(<SomeNode>value</SomeNode>)');
Voorbeelden
Dit artikel bevat XQuery-voorbeelden voor XML-exemplaren die zijn opgeslagen in verschillende xml-typekolommen in de AdventureWorks-database .
Een. De functie data() XQuery gebruiken om de getypte waarde van een knooppunt te extraheren
De volgende query illustreert hoe de data() functie wordt gebruikt om waarden van een kenmerk, een element en een tekstknooppunt op te halen:
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query(N'
for $pd in //p1:ProductDescription
return
<Root
ProductID = "{ data( ($pd//@ProductModelID)[1] ) }"
Feature = "{ data( ($pd/p1:Features/wm:Warranty/wm:Description)[1] ) }" >
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
Dit is het resultaat:
<Root ProductID="19" Feature="parts and labor"/>
Zoals vermeld, is de data() functie optioneel wanneer u kenmerken maakt. Als u de data() functie niet opgeeft, wordt impliciet ervan uitgegaan. De volgende query produceert dezelfde resultaten als de vorige query:
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
for $pd in //p1:ProductDescription
return
<Root
ProductID = "{ ($pd/@ProductModelID)[1] }"
Feature = "{ ($pd/p1:Features/wm:Warranty/wm:Description)[1] }" >
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
In de volgende voorbeelden ziet u exemplaren waarin de data() functie is vereist.
In de volgende query $pd/p1:Specifications/Material wordt het <Material> element geretourneerd.
data($pd/p1:Specifications/ Material) Retourneert ook tekengegevens die zijn getypt als xdt:untypedAtomic, omdat <Material> dit niet is getypt. Wanneer de invoer niet is getypt, wordt het resultaat data() getypt als xdt:untypedAtomic.
SELECT CatalogDescription.query('
declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
for $pd in //p1:ProductDescription
return
<Root>
{ $pd/p1:Specifications/Material }
{ data($pd/p1:Specifications/Material) }
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 19;
Dit is het resultaat:
<Root>
<Material>Aluminum Alloy</Material>Aluminum Alloy
</Root>
In de volgende query data($pd/p1:Features/wm:Warranty) wordt een statische fout geretourneerd, omdat <Warranty> dit een complex typeelement is.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS p1, 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS wm)
SELECT CatalogDescription.query('
<Root>
{ /p1:ProductDescription/p1:Features/wm:Warranty }
{ data(/p1:ProductDescription/p1:Features/wm:Warranty) }
</Root>
') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 23;