Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Прочетете XML данни в йерархични таблици

Можем да (з)използваме ROW_NUMBER() за генериране на идентификатори извън XQuery. Преамбюл:

WITH questions AS (
    SELECT
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS ID,
        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)
), questions_and_answers AS (
    SELECT ID, questionText, result, answer.query('.') AS answer
    FROM questions
    CROSS APPLY answers.nodes('answer') AS a(answer)
)

А сега извлечете въпросите с

SELECT ID, questionText, result 
FROM questions

И отговорите с

SELECT ID AS questionID,
    q.answer.value('answer[1]', 'nvarchar(max)') AS answer,
    q.answer.value('answer[1]/@number', 'int') AS number,
    q.answer.value('answer[1]/@value', 'int') AS val,
    q.answer.value('answer[1]/@chosen', 'bit') AS chosen
FROM questions_and_answers AS q


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възможно ли е да се изпълни текстов файл от SQL заявка?

  2. Извлечете>901 реда от SQL Server 2008 свързан сървър към Active Directory

  3. LINQ:добавяне на клауза where само когато стойността не е нула

  4. СЪЕДИНЯВАЙТЕ три таблици и събирайте данни от множество редове за всеки DISTINCT ред в отделна колона

  5. Lead() и LAG() функционалност в SQL Server 2008