XML変数を他のテーブルに結合する方法はわかっていますが、この場合はテーブルから各行を選択し、XMLの構造に加えて行がその行に沿って表示されます。ほとんどの例が単一のXML値を扱うので、私はこれを手助けするための例をオンラインで見つけることができません(もしあれば、私は無数の他のXML例の中でそれらを見つけることができませんでした)。構造化XMLデータに加えて行データを選択する
テーブル構造はこれです:
CREATE TABLE tbl_QuizHistory (
HistoryId int PRIMARY KEY,
QuizData xml NOT NULL
);
各QuizData
行の値はこれに類似している:earlier question I was shown how to display the XML data hierarchically(@xml ==> questions ==> answer(s)
)において
<quizresult>
<question>
<questionText>Which fire extinguisher is most suitable for a waste paper basket fire?</questionText>
<answer number="0" value="0" chosen="0" imageURL="">Powder</answer>
<answer number="1" value="0" chosen="0" imageURL="">Carbon Dioxide (CO2)</answer>
<answer number="2" value="1" chosen="1" imageURL="">Water (H2O)</answer>
<answer number="3" value="0" chosen="0" imageURL="">Foam</answer>
<result>Correct</result>
</question>
<question>
<questionText>Should you use lifts during a fire?</questionText>
<answer number="0" value="0" chosen="0" imageURL="">Yes</answer>
<answer number="1" value="1" chosen="1" imageURL="">No</answer>
<result>Correct</result>
</question>
</quizresult>
、だけI単一のXML値について質問/回答階層をテーブルに移行するようになっている。
-- Works for a single XML value/variable...
;WITH q AS (
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS qID,
n.q.value('(./questionText)[1]', 'nvarchar(max)') AS questionText,
n.q.value('(./result)[1]', 'nvarchar(50)') AS result,
n.q.query('answer') AS answers
FROM
@xml.nodes('/quizresult/question') AS n (q)
),
qa AS (
SELECT
qID,
questionText,
result,
answer.query('.') AS answer
FROM
q CROSS APPLY
answers.nodes('answer') AS a(answer)
)
SELECT
qa.qID,
q.questionText,
q.result,
qa.answer.value('answer[1]', 'nvarchar(max)') AS answer,
qa.answer.value('answer[1]/@number', 'int') AS number,
qa.answer.value('answer[1]/@value', 'int') AS val,
qa.answer.value('answer[1]/@chosen', 'bit') AS chosen
FROM
qa INNER JOIN
q ON qa.qID = q.qID;
どのようにしてこのロジックを各XML行のすべてのテーブル行に適用できますか?私は(これは、SQL文によって生成されたが、明確にするための任意のIDで、そしてXMLには存在しない)クイズはそのクイズから
- 表示する必要が
- すべてを
:各質問HistoryId qID questionText result answer number val chosen --------- ---- --------------------------------------------------------------------------------------- ---------- ---------------------------------------------------------------------------------------- ------- ---- ------ 100 1 Which fire extinguisher is most suitable for a waste paper basket fire? Correct Powder 0 0 0 100 1 Which fire extinguisher is most suitable for a waste paper basket fire? Correct Carbon Dioxide (CO2) 1 0 0 100 1 Which fire extinguisher is most suitable for a waste paper basket fire? Correct Water (H2O) 2 1 1 100 1 Which fire extinguisher is most suitable for a waste paper basket fire? Correct Foam 3 0 0 100 2 What should your immediate action be on hearing a fire alarm? Correct Find all of your colleagues before making a speedy exit together 0 0 0 100 2 What should your immediate action be on hearing a fire alarm? Correct Collect all your valuables before making a speedy exit 1 0 0 100 2 What should your immediate action be on hearing a fire alarm? Correct Check the weather to see if you need your coat before leaving 2 0 0 100 2 What should your immediate action be on hearing a fire alarm? Correct Leave the building by the nearest exit, closing doors behind you if the rooms are empty 3 1 1 101 1 Which fire extinguisher is most suitable for a waste paper basket fire? Correct Powder 0 0 0 101 1 Which fire extinguisher is most suitable for a waste paper basket fire? Correct Carbon Dioxide (CO2) 1 0 0 101 1 Which fire extinguisher is most suitable for a waste paper basket fire? Correct Water (H2O) 2 1 1 101 1 Which fire extinguisher is most suitable for a waste paper basket fire? Correct Foam 3 0 0 101 2 Should you use lifts during a fire? Correct Yes 0 0 0 101 2 Should you use lifts during a fire? Correct No 1 1 1 101 3 Which part of a Carbon Dioxide (CO2) extinguisher should you not touch when operating? Incorrect The body of the extinguisher 0 0 1 101 3 Which part of a Carbon Dioxide (CO2) extinguisher should you not touch when operating? Incorrect The release trigger and the bottom of the extinguisher 1 0 0 101 3 Which part of a Carbon Dioxide (CO2) extinguisher should you not touch when operating? Incorrect The horn of the extinguisher 2 1 0
のための答えは私が達成しようとしている最終的な結果は次のようなものを生成します
これは多数の重複を作成することに感謝しています(質問は各回答ごとに繰り返されます)が、大丈夫です。
私はを持っており、サンプルデータが設定されています。
それは面白いです。他の回答に応じて詳細の回答レベルを表示するように拡張してください。そのレベルでの質問がどのように行われるのかがわかりますか? – EvilDr
はい、回答を編集しました – Serg