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