次の形式の XML があります。
<filters>
<filter name="filterByOperatingSystem">
<parameters operatingSystem="Windows" />
</filter>
<filter name="filterBySoftware">
<parameter software="Office" />
</filter>
</filters>
に格納され@XML
ます。
私がやりたいことは、いくつかの処理を行うことができるように、各フィルターをループすることです。
私の考えでは、カーソル内のパラメーター要素とともに各フィルター名を取得できると考えていましたが、これまでに取得できる最も近いものは次のとおりです。
DECLARE crsDTO cursor static forward_only read_only for
SELECT
tab.col.value('@name','NVARCHAR(64)')
FROM
@XML.nodes('//filter') tab(col)
パラメータxmlを取得できるかどうかを確認するために、次のクエリを試しました。
DECLARE crsDTO cursor static forward_only read_only for
SELECT
tab.col.value('@name','NVARCHAR(64)'),
tab.col.value('parameter[1]' 'XML')
FROM
@XML.nodes('//filter') tab(col)
しかし、エラーが発生しました:
値の型で使用されているデータ型 XML が無効です
私のフィルターはさまざまな属性を持つことができるため、最初のクエリで属性を直接取得しようとはしません (私の考えでは、カーソルを実行し、フィルター名に応じて、ノードから特定のパラメーターを取得できました)。 xmlノードを取得できなければ、これを行う方法がわかりません。
これを解決する方法について何か提案はありますか?