Megosztás:


Adatkiegészítő függvények – adatok (XQuery)

A következőkre vonatkozik:SQL Server

A $arg által megadott egyes elemek beírt értékét adja vissza.

Szemantika

fn:data ($arg as item()*) as xdt:untypedAtomic*

Arguments

$arg

Azoknak az elemeknek a sorrendje, amelyek beírt értékeit adja vissza.

Megjegyzések

A gépelt értékekre a következő szempontok vonatkoznak:

  • Az atomértékek beírt értéke az atomérték.

  • A szövegcsomópont beírt értéke a szövegcsomópont sztringértéke.

  • A megjegyzés beírt értéke a megjegyzés sztringértéke.

  • A feldolgozási utasítás gépelt értéke a feldolgozási utasítás tartalma, a feldolgozási utasítás célneve nélkül.

  • A dokumentumcsomópont beírt értéke a sztringértéke.

Az attribútum- és elemcsomópontokra az alábbi szempontok vonatkoznak:

  • Ha egy attribútumcsomópont XML-sématípussal van begépelve, a beírt érték ennek megfelelően a beírt érték.

  • Ha az attribútumcsomópont nincs begépelve, a gépelt érték megegyezik a sztring értékével, amelyet a program a példányaként xdt:untypedAtomicad vissza.

  • Ha az elemcsomópont nincs begépelve, a beírt értéke megegyezik a visszaadott xdt:untypedAtomicsztringértékével.

A gépelt elemcsomópontokra a következő szempontok vonatkoznak:

  • Ha az elem egyszerű tartalomtípussal rendelkezik, data() az elem beírt értékét adja vissza.

  • Ha a csomópont összetett típusú, beleértve az xs:anyType típust is, data() statikus hibát ad vissza.

Bár a data() függvény használata gyakran nem kötelező, ahogy az az alábbi példákban is látható, a függvény megadása kifejezetten növeli a data() lekérdezés olvashatóságát. További információ: XQuery Basics.

Nem adhatja meg data() a létrehozott XML-fájlokat, ahogy az alábbi példában is látható:

DECLARE @x AS XML;

SET @x = '';

SELECT @x.query('data(<SomeNode>value</SomeNode>)');

Példák

Ez a cikk XQuery-példákat tartalmaz az AdventureWorks-adatbázis különböző XML-típusoszlopaiban tárolt XML-példányokra.

A. A data() XQuery függvény használata egy csomópont gépelt értékének kinyeréséhez

Az alábbi lekérdezés bemutatja, hogyan használja a data() függvény egy attribútum, egy elem és egy szöveges csomópont értékeinek lekérésére:

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;

Az eredmény a következő:

<Root ProductID="19" Feature="parts and labor"/>

Ahogy már említettük, a data() függvény nem kötelező attribútumok létrehozásakor. Ha nem adja meg a függvényt data() , azt implicit módon feltételezzük. A következő lekérdezés ugyanazokat az eredményeket hozza létre, mint az előző lekérdezés:

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;

Az alábbi példák azokat a példányokat szemléltetik, amelyekben a data() függvény szükséges.

Az alábbi lekérdezésben $pd/p1:Specifications/Material az <Material> elemet adja vissza. Emellett a data($pd/p1:Specifications/ Material) karakteradatokat a következőképpen adja xdt:untypedAtomicvissza, mert <Material> nincs begépelve. Ha a bemenet nincs begépelve, az eredmény data() a következőképpen lesz begépelve 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;

Az eredmény a következő:

<Root>
  <Material>Aluminum Alloy</Material>Aluminum Alloy
</Root>

A következő lekérdezésben data($pd/p1:Features/wm:Warranty) statikus hibát ad vissza, mert <Warranty> összetett típuselem.

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;