Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyoal Nilai dalam Lajur XML dalam SQL Server?

Bagaimana untuk Menyoal Nilai dalam Lajur XML dalam SQL Server?

DDD
DDDasal
2025-01-13 12:08:44971semak imbas

How to Query Values within XML Columns in SQL Server?

Mengakses Data dalam Lajur XML Pelayan SQL

SQL Server membenarkan menyimpan data XML dalam lajur yang ditakrifkan sebagai jenis data XML. Mendapatkan semula data khusus daripada lajur ini memerlukan pertanyaan khusus.

Katakan anda mempunyai lajur XML bernama "Peranan" dengan struktur ini:

<code class="language-xml"><root><role>Alpha</role><role>Beta</role><role>Gamma</role></root></code>

Untuk mencari baris yang mengandungi peranan tertentu, gunakan pertanyaan ini:

<code class="language-sql">SELECT
  Roles
FROM
  MyTable
WHERE
  Roles.value('(/root/role)[1]', 'varchar(max)') LIKE 'StringToSearchFor'</code>

Ini menggunakan Roles.value untuk mengekstrak nilai elemen role pertama, menukarnya kepada varchar(max). Ini membolehkan carian untuk peranan tertentu.

Jika lajur anda belum lagi merupakan jenis data XML, gunakan CAST untuk menukarnya sebelum membuat pertanyaan.

Pertanyaan juga boleh menyasarkan atribut XML. Contohnya, dengan XML ini dalam lajur "data":

<code class="language-xml"><utilities.codesystems.codesystemcodes ....="" code="0001F" codesystem="2" codetags="-19-" iid="107"></utilities.codesystems.codesystemcodes></code>

Untuk mendapatkan baris dengan CodeSystem ialah "2":

<code class="language-sql">SELECT
  [data]
FROM
  [dbo].[CodeSystemCodes_data]
WHERE
  CAST([data] AS XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@CodeSystem)[1]', 'varchar(max)') = '2'</code>

Untuk pertanyaan XML yang lebih maju dalam T-SQL, lihat:

Sebagai alternatif, CROSS APPLY menawarkan lebih fleksibiliti untuk mencari berbilang elemen "peranan":

<code class="language-sql">SELECT *
FROM
(
    SELECT
        pref.value('(text())[1]', 'varchar(32)') AS RoleName
    FROM
        MyTable
    CROSS APPLY
        Roles.nodes('/root/role') AS Roles(pref)
) AS Result
WHERE
    RoleName LIKE '%ga%'</code>

Pendekatan ini membolehkan pengekstrakan data yang lebih cekap dan disasarkan daripada lajur XML dalam SQL Server.

Atas ialah kandungan terperinci Bagaimana untuk Menyoal Nilai dalam Lajur XML dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn