Aracılığıyla paylaş


Atomization (XQuery)

Atomization yazılı değer öğe ayıklama işlemidir.Bu işlem, belirli koşullar altında örtük.Aritmetik ve karşılaştırma işleçleri gibi XQuery işleçlerin bazıları, bu işlemi bağlıdır.Aritmetik işleçler, doğrudan düğümlerine uyguladığınızda, örneğin, yazılan değerinin bir düğüm ilk örtülü olarak çağırarak alınır veri işlev.Bu atomik değerin aritmetik işleç için işlenen geçirir.

Örneğin, aşağıdaki sorgu LaborHours öznitelikleri toplamını verir.Bu durumda, data() örtülü olarak uygulanan öznitelik düğümlerin.

declare @x 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)')

Gerekli değildir, ancak aynı zamanda açıkça belirtebilirsiniz data() işlev:

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

Aritmetik işleç kullandığınızda örtülü atomization için başka bir örnektir.The + işleç requires atomik values, and data() is implicitly applied to retrieve the atomik value of the LaborHours öznitelik. Sorguyu belirtilen yönergeleri karşı sütun, xml ProductModel tablosunda yazın. Aşağıdaki sorgu LaborHours döndürür öznitelik üç kez.Sorguda, aşağıdakilere dikkat edin:

  • OrignialLaborHours oluşturarak, öznitelik, atomization örtülü olarak uygulanan () tarafından döndürülen sıra aynı cinsten tek adet$WC/@LaborHours). Klavyeyle yazılan LaborHours öznitelik değeri için OrignialLaborHours atanır.

  • UpdatedLaborHoursV1 oluşturarak, öznitelik, aritmetik işleç atomik değerleri gerektirir.Bu nedenle, data() örtülü olarak için LaborHours uygulanan öznitelik, döndürülür () ile$WC/@LaborHours). Atomik 1 değeri, daha sonra eklenir.Inşaat UpdatedLaborHoursV2 özniteliğinin açık uygulamasını gösterir. data(), ancak gerekli değildir.

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

Bu sonucu oluşur:

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

The atomization bir örneğinde basit türü, boş veya statik türde bir hata oluşur.

Atomization de işlevlerine geçirilen karşılaştırma ifade parametre değerleri işlevleri tarafından döndürülen oluşuyor cast() ifadeler ve ifadeler sipariş sırada yan tümce ile geçirildi.