Aracılığıyla paylaş


Atomization (XQuery)

Atomization bir öğenin yazılan değeri çıkarma işlemidir. Bu süreç belirli koşullar altında açık. Aritmetik ve karşılaştırma işleçleri gibi XQuery işleçleri bazıları bu işlemde bağlıdır. Örneğin, düğüm yazılı değerini ilk örtülü olarak çağırarak alınır, doğrudan düğüme aritmetik işleçler uyguladığınızda, veri işlev. Bu aritmetik işleç işlenen atomik değeri geçirir.

Örneğin, aşağıdaki sorgu LaborHours öznitelikleri toplamını döndürür. Bu durumda, data()örtülü öznitelik düğümlerine uygulanır.

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)')

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)')

Şart olmamakla birlikte de açıkça belirtinKAYMA data()fonksiyonu:

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

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

Aritmetik işleçler kullandığınızda örtülü atomization bir başka örnektir. + Operatör gerektirir atomik değerleri, ve data()LaborHours özniteliği atomik değeri almak için örtülü olarak uygulanır. Sorgu karşı yönergeleri sütun belirtilen xmltürü ProductModel tablosundaki. Aşağıdaki sorgu, üç kez LaborHours özniteliği döndürür. Sorguda, aşağıdakilere dikkat edin:

  • OrignialLaborHours özniteliği oluştururken, atomization örtülü tarafından döndürülen tek sıra uygulanır ($WC/@LaborHours). LaborHours özniteliği yazılı değerini OrignialLaborHours için atanır.

  • UpdatedLaborHoursV1 özniteliği oluştururken, aritmetik işleç atomik değerleri gerektirir. Bu nedenle, data() LaborHours özniteliği tarafından döndürülen örtülü olarak uygulanır ($WC/@LaborHours). Atomik değeri 1 için eklenir. Öznitelik UpdatedLaborHoursV2 inşaat açık uygulama 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

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

Sonuç şudur:

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

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

Atomization bir örneğini basit türü, boş veya statik tür hatası oluşur.

Atomization da oluşur karşılaştırma ifade parametreleri işlevleri işlevleri tarafından döndürülen değerleri geçirilen cast()ifadeler ve sıralama ifadeler sırayla yan tümcesiyle geçti.

Ayrıca bkz.

Başvuru

Xml veri türü karşı XQuery işlevleri

Kavramlar

Karşılaştırma ifadeleri (XQuery)

Diğer Kaynaklar

XQuery temelleri