SQL Server XML 列値の抽出
SQL Server の XML 列タイプにより、XML データの効率的な保存と取得が可能になります。このガイドでは、これらの列内の特定の値をクエリする効果的な方法を説明します。
課題:
SQL Server データベースに「Roles」という名前の XML 列があり、次のようなデータが含まれていると想像してください。
<code class="language-xml"><root><role>Alpha</role><role>Beta</role><role>Gamma</role></root></code>
目標は、「ロール」列内に特定のロール (パラメーターとして指定) が存在するすべての行を検索することです。
解決策:
単純なアプローチでは、value()
関数を使用します。
<code class="language-sql">SELECT Roles FROM MyTable WHERE Roles.value('(/root/role)[1]', 'varchar(max)') LIKE 'StringToSearchFor'</code>
ここで、Roles
は XML 列で、StringToSearchFor
は検索しているロールを表します。 value()
関数は、XPath 式を使用してノードを抽出します。
高度なシナリオ:
より複雑なクエリには、次のテクニックが必要になる場合があります:
CAST()
を使用して変換します。value()
内の XPath 式を変更して、特定の属性をターゲットにします。効率の向上:
大規模な 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>
Roles.nodes()
は、XPath 式に基づいて一致するすべてのノードを抽出します。 value()
は各ノードのテキスト コンテンツを取得し、単一の XML ドキュメント内で複数のロールを効率的に処理できるようにします。
概要:
SQL Server XML 列から値を取得するには、特定の関数と戦略が必要です。ここで紹介する方法は、データベース内に保存されている XML から単純なデータと複雑なデータの両方を抽出するための多用途のソリューションを提供します。
以上がSQL Server で XML 列の値を効率的にクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。