ホームページ >データベース >mysql チュートリアル >SQL Server で XML 列内の値をクエリするにはどうすればよいですか?

SQL Server で XML 列内の値をクエリするにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-13 12:08:441027ブラウズ

How to Query Values within XML Columns in SQL Server?

SQL Server の XML 列のデータへのアクセス

SQL Server では、XML データ型として定義された列に XML データを格納できます。 これらの列から特定のデータを取得するには、特殊なクエリが必要です。

次の構造を持つ「Roles」という名前の XML 列があるとします。

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

特定のロールを含む行を検索するには、次のクエリを使用します。

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

これは、Roles.value を使用して最初の role 要素の値を抽出し、それを varchar(max) に変換します。 これにより、特定のロールを検索できるようになります。

列がまだ XML データ型でない場合は、クエリを実行する前に CAST を使用して変換します。

クエリは XML 属性をターゲットにすることもできます。 たとえば、「データ」列に次の XML があるとします。

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

CodeSystemが「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>

T-SQL でのより高度な XML クエリについては、以下を参照してください。

代わりに、CROSS APPLY を使用すると、複数の「役割」要素をより柔軟に検索できます。

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

このアプローチにより、SQL Server の XML 列からのデータのより効率的かつ的を絞った抽出が可能になります。

以上がSQL Server で XML 列内の値をクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。