私は、フォームの結果をXML列に格納するデータベースを持っています。残念ながら、最初に余分な文字が格納されているため、直接解析できないので、値を解析する前に削除する必要があります。私が持っているもう1つの制限は、私がレポート(Xtraction)を表示するのに使うシステムが、サブクエリを実行することしか許さないということです。SQLサブクエリのXMLドロップダウンから選択した値を返します
これらの制限にもかかわらず、XMLフィールドからテキスト値を取得する方法は成功しましたが、ドロップダウンから選択した値に適用できないようです。私のメソッドは、選択された値だけでなく、すべてのドロップダウンオプションも区切られていない文字列で返します。
の形が非常に大きいため、私は余分な文字や下のXMLのドロップダウン部分以外のすべてを削除した:
_RCFM*=.hÞ<form><select id="Dropdown01" label="Substantive APS Level:"
mandatory="true" readonly="false" style="combo" type="string"
visible="true">EL1<option label=""/><option
label="APS5">APS5</option><option label="APS6">APS6</option><option
label="EL1">EL1</option></select></form>
私が使用していたサブクエリは次のとおりです。
(SELECT
x.CARTITEMID
, x.DROPDOWN01
FROM (
SELECT
CARTITEMID
, CAST(RIGHT(cast(cast(SVCCARTITEMM1.OPTIONS as varbinary(max)) as varchar(max)),
LEN(cast(cast(SVCCARTITEMM1.OPTIONS as varbinary(max)) as varchar(max)))
-CHARINDEX('<form>',cast(cast(SVCCARTITEMM1.OPTIONS as varbinary(max)) as varchar(max)))+1)
AS XML).value('(/form/select[@id="Dropdown01"])[1]', 'varchar(max)')[DROPDOWN01]
FROM SVCCARTITEMM1) x
)
上記のサブクエリの結果は次のとおりです。 EL1APS5APS6EL1
この場合、選択したテキストのみを返す必要があります。この場合、最初の 'EL1'は文字列。
CASTから 'AS XML'までのコードは、通常はフィールド参照の場所であり、これは前述の先頭の文字を変換して削除するために使用したものです。
お手伝いをしていますが、私は本当にこのやや不明瞭な問題の解決策を見つけようとしました。
'SVCCARTITEMM1.OPTIONS'のデータ型は何ですか? – Shnugo