私は、入力されたXML文書をテキストとして保存しています。だから私は、XMLメソッドを使用できるようにするために、共通テーブル式を使用してXMLにデータ型を変換する使用します。XMLクエリー()が動作します。値()にはシングルトンが必要ですxdt:untypedAtomic
WITH xoutput AS (
SELECT CONVERT(xml, t.requestpayload) 'requestpayload'
FROM TABLE t
WHERE t.methodid = 1)
SELECT x.requestpayload.query('declare namespace s="http://blah.ca/api";/s:validate-student-request/s:student-id') as studentid
FROM xoutput x
クエリは私に要素を返し、動作します。しかし、私は価値の唯一の興味:
WITH xoutput AS (
SELECT CONVERT(xml, t.requestpayload) 'requestpayload'
FROM TABLE t
WHERE t.methodid = 1)
SELECT x.requestpayload.value('declare namespace s="http://blah.ca/api";/s:validate-student-request/s:student-id', 'int') as studentid
FROM xoutput x
は、これは私に次のエラーを与える:私はGoogleで検索してきた何
'value()' requires a singleton (or empty sequence), found operand of type 'xdt:untypedAtomic *'
は、XPath/XQueryは括弧内および/またはにする必要があると述べていますneed "[1]" - どちらもうまくいきませんでした。 XMLにはstudent-id要素が1つしかありませんが、スキーマではそれ以上のことが可能ですか?
さらに、検索したい要素の値が多数あります。メソッド呼び出しではなく名前空間を宣言する方法がありますか?
私が理解しているように、 '[1]'は最初の結果のみを返し、 '.value( '。''はすべての結果を返します。 –