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
Lepaskan: 2025-01-13 12:08:44
asal
980 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan