Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Returnerar det angivna värdet för varje objekt som anges av $arg.
Syntax
fn:data ($arg as item()*) as xdt:untypedAtomic*
Argument
$arg
Sekvens med objekt vars typerade värden returneras.
Anmärkningar
Följande överväganden gäller för inskrivna värden:
Det typerade värdet för ett atomiskt värde är det atomiska värdet.
Det typerade värdet för en textnod är strängvärdet för textnoden.
Det angivna värdet för en kommentar är strängvärdet för kommentaren.
Det angivna värdet för en bearbetningsinstruktion är innehållet i bearbetningsinstruktionen, utan målnamnet för bearbetningsinstruktionen.
Det typerade värdet för en dokumentnod är dess strängvärde.
Följande överväganden gäller för attribut- och elementnoder:
Om en attributnod skrivs med en XML-schematyp är dess typerade värde det typerade värdet.
Om attributnoden är otypad är dess typerade värde lika med dess strängvärde som returneras som en instans av
xdt:untypedAtomic.Om elementnoden inte har skrivits är dess typerade värde lika med dess strängvärde som returneras som en instans av
xdt:untypedAtomic.
Följande överväganden gäller för inskrivna elementnoder:
Om elementet har en enkel innehållstyp
data()returnerar det typerade värdet för elementet.Om noden är av komplex typ, inklusive xs:anyType,
data()returneras ett statiskt fel.
Även om det ofta är valfritt att använda data() funktionen, vilket visas i följande exempel, ökar det läsbarheten data() att ange funktionen explicit. Mer information finns i XQuery Basics.
Du kan inte ange data() för konstruerad XML, som du ser i följande exempel:
DECLARE @x AS XML;
SET @x = '';
SELECT @x.query('data(<SomeNode>value</SomeNode>)');
Exempel
Den här artikeln innehåller XQuery-exempel mot XML-instanser som lagras i olika xml-typkolumner i AdventureWorks-databasen .
A. Använd funktionen data() XQuery för att extrahera skrivet värde för en nod
Följande fråga illustrerar hur data() funktionen används för att hämta värden för ett attribut, ett element och en textnod:
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;
Här är resultatet:
<Root ProductID="19" Feature="parts and labor"/>
Som nämnts data() är funktionen valfri när du skapar attribut. Om du inte anger funktionen antas den data() implicit. Följande fråga ger samma resultat som föregående fråga:
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;
I följande exempel visas instanser där data() funktionen krävs.
I följande fråga $pd/p1:Specifications/Material returnerar elementet <Material> .
data($pd/p1:Specifications/ Material) Returnerar också teckendata som skrivits som xdt:untypedAtomic, eftersom <Material> de är otypade. När indata är otypade skrivs resultatet av data() som 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;
Här är resultatet:
<Root>
<Material>Aluminum Alloy</Material>Aluminum Alloy
</Root>
I följande fråga data($pd/p1:Features/wm:Warranty) returnerar ett statiskt fel, eftersom <Warranty> är ett komplext typelement.
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;