私の会社の「連絡先」テーブルにフィールドがあります。そのテーブルには、XML タイプの列があります。列には、特定の連絡先に関するその他のデータが保持されます。例えば。
<contact>
<refno>123456</refno>
<special>a piece of custom data</special>
</contact>
以下のタグcontact
は連絡先ごとに異なる可能性があるため、同じテーブル内のリレーショナル データ列と一緒にこれらのフラグメントをクエリする必要があります。
私は次のような構造を使用しました:
SELECT c.id AS ContactID,c.ContactName as ForeName,
c.xmlvaluesn.value('(contact/Ref)[1]', 'VARCHAR(40)') as ref,
INNER JOIN ParticipantContactMap pcm ON c.id=pcm.contactid
AND pcm.participantid=2140
WHERE xmlvaluesn.exist('/contact[Ref = "118985"]') = 1
この方法は正常に機能しますが、サーバーが応答するまでに時間がかかります。また、nodes() 関数を使用して XML ノードを解析し、exist() を使用して、探している値がノードに保持されているかどうかをテストしました。
XML列をクエリするより良い方法を知っている人はいますか??