ホームページ >データベース >mysql チュートリアル >SQL Server で XML 列内の特定の値をクエリする方法
SQL Server 内の XML データから特定の値を効率的に取得することは、データ分析にとって非常に重要です。 このガイドでは、XML 列に存在する特定の値をクエリする方法を説明します。
ユーザーの役割を表す XML を格納する、「Roles」という名前の XML 列について考えてみましょう。 XML フラグメントのサンプルは次のようになります:
<code class="language-xml"><root><role>Alpha</role><role>Beta</role><role>Gamma</role></root></code>
特定のロール (例: "Gamma") を含むすべての行を検索するには、次の T-SQL クエリを使用します。
<code class="language-sql">SELECT Roles.value('(/root/role)[1]', 'varchar(max)') FROM MyTable WHERE Roles.value('(/root/role)[1]', 'varchar(max)') LIKE 'Gamma';</code>
このクエリは、value()
関数を使用して最初のロール名を抽出し、部分一致には LIKE
を使用します。 これは、「ロール」が XML データ型であることを前提としていることに注意してください。 他のデータ型の場合は、最初に XML に変換する必要があります。
XML 要素から特定の属性をクエリする必要がある場合は、value()
関数がツールとして残りますが、XPath 式は変更されます。たとえば、次の属性を持つ XML について考えてみましょう。
<code class="language-xml"><utilities.codesystems.codesystemcodes code="0001F" codesystem="2" ... /></code>
「codesystem」属性値 (「2」) を取得するには、次を使用します。
<code class="language-sql">SELECT CAST([data] AS XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@codesystem)[1]', 'varchar(max)') FROM [dbo].[CodeSystemCodes_data] WHERE CAST([data] AS XML).value('(/Utilities.CodeSystems.CodeSystemCodes/@codesystem)[1]', 'varchar(max)') = '2';</code>
ネストされた XML 構造の処理や複数のロール要素の反復処理など、より複雑なシナリオの場合は、XML フラット化や CROSS APPLY
などのテクニックを検討してください。 これらのメソッドの詳細なガイダンスについては、高度な SQL Server XML ドキュメントを参照してください。
以上がSQL Server で XML 列内の特定の値をクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。