入力したxmlドキュメントをテキストとして保存しています。そこで、XMLメソッドを使用できるようにするために、共通テーブル式を使用してデータ型をxmlにCONVERTします。
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
これにより、次のエラーが発生します。
'value()'にはシングルトン(または空のシーケンス)が必要で、タイプ'xdt:untypedAtomic*'のオペランドが見つかりました
私がグーグルで検索したところによると、XPATH / XQUERYは括弧内にある必要があるか、「[1]」が必要です。どちらも機能していません。スキーマにはもっと多くのことができると思いますが、xmlにはstudent-id要素が1つだけありますか?
さらに、取得したい要素値が多数あります-メソッド呼び出しごとではなく、名前空間を1回宣言する方法はありますか?