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

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

DDD
リリース: 2025-01-13 12:08:44
オリジナル
1028 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート