Bagikan melalui


Atomisasi (XQuery)

Berlaku untuk:SQL Server

Atomisasi adalah proses mengekstrak nilai item yang diekstrak. Proses ini tersirat dalam keadaan tertentu. Beberapa operator XQuery, seperti operator aritmatika dan perbandingan, bergantung pada proses ini. Misalnya, ketika Anda menerapkan operator aritmetika langsung ke simpul, nilai node yang diketik pertama kali diambil dengan secara implisit memanggil fungsi data. Ini meneruskan nilai atom sebagai operand ke operator aritmatika.

Misalnya, kueri berikut mengembalikan total atribut LaborHours. Dalam hal ini, data() secara implisit diterapkan ke simpul atribut.

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

Meskipun tidak diperlukan, Anda juga dapat secara eksplisit menentukan fungsi data():

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

Contoh lain dari atomisasi implisit adalah ketika Anda menggunakan operator aritmatika. Operator + memerlukan nilai atomik, dan data() secara implisit diterapkan untuk mengambil nilai atom atribut LaborHours. Kueri ditentukan terhadap kolom Instruksi jenis xml dalam tabel ProductModel. Kueri berikut mengembalikan atribut LaborHours tiga kali. Dalam kueri, perhatikan hal berikut:

  • Dalam membangun atribut OriginalLaborHours, atomisasi secara implisit diterapkan pada urutan singleton yang dikembalikan oleh ($WC/@LaborHours). Nilai jenis atribut LaborHours ditetapkan ke OriginalLaborHours.

  • Dalam membuat atribut UpdatedLaborHoursV1, operator aritmatika memerlukan nilai atomik. Oleh karena itu, data() secara implisit diterapkan ke atribut LaborHours yang dikembalikan oleh ($WC/@LaborHours). Nilai atom 1 kemudian ditambahkan ke dalamnya. Konstruksi atribut UpdatedLaborHoursV2 menunjukkan aplikasi eksplisit data(), tetapi tidak diperlukan.

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  

Ini adalah hasilnya:

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

Atomisasi menghasilkan instans jenis sederhana, set kosong, atau kesalahan jenis statis.

Atomisasi juga terjadi dalam parameter ekspresi perbandingan yang diteruskan ke fungsi, nilai yang dikembalikan oleh fungsi, ekspresi cast(), dan ekspresi pengurutan yang diteruskan dalam urutan berdasarkan klausa.

Lihat Juga

Dasar-Dasar XQuery
Ekspresi Perbandingan (XQuery)
Fungsi XQuery terhadap Tipe Data xml