Megosztás:


Atomizálás (XQuery)

A következőkre vonatkozik:SQL Server

Az atomizálás egy elem begépelt értékének kinyerése. Ezt a folyamatot bizonyos körülmények között feltételezik. Az XQuery-operátorok némelyike, például az aritmetikai és összehasonlító operátorok, a folyamattól függenek. Ha például közvetlenül a csomópontokra alkalmazza az aritmetikai operátorokat, a rendszer először a adatfüggvényimplicit meghívásával kéri le a csomópont beírt értékét. Ez operandusként adja át az atomi értéket az aritmetikai operátornak.

Az alábbi lekérdezés például az attribútumok összegét LaborHours adja vissza. Ebben az esetben data() a rendszer implicit módon alkalmazza az attribútumcsomópontokat.

DECLARE @x AS XML;

SET @x = '<ROOT><Location LID="1" SetupTime="1.1" LaborHours="3.3" />
<Location LID="2" SetupTime="1.0" LaborHours="5" />
<Location LID="3" SetupTime="2.1" LaborHours="4" />
</ROOT>';
-- data() implicitly applied to the attribute node sequence.

SELECT @x.query('sum(/ROOT/Location/@LaborHours)');

Bár nem kötelező, a függvényt explicit módon is megadhatja data() :

SELECT @x.query('sum(data(ROOT/Location/@LaborHours))');

Az implicit atomizálásra egy másik példa az aritmetikai operátorok használata. Az + operátor atomi értékeket igényel, és data() implicit módon alkalmazva lesz az attribútum atomi értékének lekérésére LaborHours . A lekérdezés a ProductModel tábla xml- típusának Utasítások oszlopában van megadva. Az alábbi lekérdezés háromszor adja vissza az LaborHours attribútumot. A lekérdezésben fontolja meg a következő szempontokat:

  • Az attribútum létrehozásakor a rendszer implicit módon alkalmazza a OriginalLaborHours atomizálást a függvény által $WC/@LaborHoursvisszaadott egytonos sorozatra. Az attribútum beírt értéke hozzá LaborHours van rendelve OriginalLaborHours.

  • Az attribútum létrehozásához az UpdatedLaborHoursV1 aritmetikai operátor atomi értékeket igényel. data() Ezért a rendszer implicit módon alkalmazza a LaborHours függvény által visszaadott $WC/@LaborHoursattribútumra. Ezután hozzáadja az 1 atomértéket. Az attribútum UpdatedLaborHoursV2 felépítése a explicit alkalmazását data()mutatja, de nem kötelező.

SELECT Instructions.query('
     declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $WC in /AWMI:root/AWMI:Location[1]
        return
            <WC OriginalLaborHours = "{ $WC/@LaborHours }"
                UpdatedLaborHoursV1 = "{ $WC/@LaborHours + 1 }"
                UpdatedLaborHoursV2 = "{ data($WC/@LaborHours) + 1 }" >
            </WC>') AS Result
FROM Production.ProductModel
WHERE ProductModelID = 7;

Az eredmény a következő:

<WC OriginalLaborHours="2.5"
    UpdatedLaborHoursV1="3.5"
    UpdatedLaborHoursV2="3.5" />

A porlasztás egy egyszerű típus, egy üres készlet vagy egy statikus típusú hiba egy példányát eredményezi.

Az atomizálás a függvényeknek átadott összehasonlítókifejezés-paraméterekben, a függvények által visszaadott értékekben, cast() a kifejezésekben és a rendezési kifejezésekben is előfordul.