Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Vrátí zadanou hodnotu pro každou položku určenou $arg.
Syntax
fn:data ($arg as item()*) as xdt:untypedAtomic*
Argumenty
$arg
Posloupnost položek, jejichž typové hodnoty jsou vráceny.
Poznámky
Následující aspekty platí pro typové hodnoty:
Zadaná hodnota atomické hodnoty je atomická hodnota.
Zadaná hodnota textového uzlu je řetězcová hodnota textového uzlu.
Zadaná hodnota komentáře je řetězcová hodnota komentáře.
Typová hodnota instrukce zpracování je obsah instrukce zpracování bez názvu cíle instrukce zpracování.
Zadaná hodnota uzlu dokumentu je její řetězcová hodnota.
Následující aspekty platí pro uzly atributů a prvků:
Pokud je uzel atributu zadán s typem schématu XML, jeho typová hodnota je zadaná hodnota odpovídajícím způsobem.
Pokud je uzel atributu nezatypovaný, jeho zadaná hodnota se rovná řetězcové hodnotě, která je vrácena jako instance
xdt:untypedAtomic.Pokud uzel elementu nebyl zadán, jeho zadaná hodnota je rovna řetězcové hodnotě, která je vrácena jako instance
xdt:untypedAtomic.
Následující aspekty platí pro uzly typů elementů:
Pokud má element jednoduchý typ obsahu,
data()vrátí zadaná hodnota prvku.Pokud je uzel komplexního typu, včetně xs:anyType,
data()vrátí statickou chybu.
I když je použití data() funkce často volitelné, jak je znázorněno v následujících příkladech, zadávání data() funkce explicitně zvyšuje čitelnost dotazů. Další informace naleznete v tématu XQuery Basics.
Nelze zadat data() pro vytvořený kód XML, jak je znázorněno v následujícím příkladu:
DECLARE @x AS XML;
SET @x = '';
SELECT @x.query('data(<SomeNode>value</SomeNode>)');
Příklady
Tento článek obsahuje příklady XQuery pro instance XML uložené v různých sloupcích typu XML v databázi AdventureWorks.
A. Extrahování typové hodnoty uzlu pomocí funkce XQuery data()
Následující dotaz ukazuje, jak data() se funkce používá k načtení hodnot atributu, elementu a textového uzlu:
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;
Tady je výsledek:
<Root ProductID="19" Feature="parts and labor"/>
Jak už bylo zmíněno, data() funkce je volitelná při vytváření atributů. Pokud funkci nezadáte data() , předpokládá se implicitně. Následující dotaz vytvoří stejné výsledky jako předchozí dotaz:
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;
Následující příklady ilustrují instance, ve kterých je funkce povinná data() .
V následujícím dotazu $pd/p1:Specifications/Material vrátí <Material> prvek.
data($pd/p1:Specifications/ Material) Vrátí také datový typ znaku jako xdt:untypedAtomic, protože <Material> je nezatypovaný. Pokud je vstup nezatypovaný, výsledek data() je zadán jako 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;
Tady je výsledek:
<Root>
<Material>Aluminum Alloy</Material>Aluminum Alloy
</Root>
V následujícím dotazu data($pd/p1:Features/wm:Warranty) vrátí statickou chybu, protože <Warranty> je komplexní prvek typu.
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;
Související obsah
- funkce XQuery proti datového typu XML