2013-12-20 2 views
2

У меня есть хранимая процедура, которая генерирует для меня вывод XML.Результат запроса формата TSQL

СП выглядит следующим образом:

ALTER PROCEDURE [dbo].[InternFetchProf] 
@positionID INT='' 
AS 
BEGIN 
SET NOCOUNT ON; 
BEGIN 
    SELECT A.[id], 
      A.[positionTitle], 
      (SELECT B.[id], 
         B.[question], 
         B.[order], 
         (SELECT D.[optionName], 
           D.[order] 
         FROM  internshipProfOptions AS D 
         WHERE questionID = B.[id] 
         ORDER BY D.[order] ASC 
         FOR  XML PATH ('optionsBlock'), TYPE, ELEMENTS, ROOT ('options')) 
       FROM  internshipProfQuestions AS B 
       WHERE positionID = A.[id] 
       ORDER BY B.[order] ASC 
       FOR  XML PATH ('questionBlock'), TYPE, ELEMENTS, ROOT ('questions')) 
    FROM  internships AS a 
    WHERE A.[id] = @positionID 
    ORDER BY closeDate ASC 
    FOR  XML PATH ('positions'), TYPE, ELEMENTS, ROOT ('root'); 
END 
END 

Это дает мне выход XML из

     <root> 
       <positions> 
       <id>1</id> 
       <positionTitle>APS Team</positionTitle> 
       <questions> 
        <questionBlock> 
        <id>1</id> 
        <question>Whats your fav color</question> 
        <order>1</order> 
        <options> 
         <optionsBlock> 
         <optionName>VBA</optionName> 
         <order>1</order> 
         </optionsBlock> 
         <optionsBlock> 
         <optionName>JavaScript</optionName> 
         <order>2</order> 
         </optionsBlock> 
         <optionsBlock> 
         <optionName>HTML</optionName> 
         <order>3</order> 
         </optionsBlock> 
        </options> 
        </questionBlock> 
        <questionBlock> 
        <id>2</id> 
        <question>Whos your daddy?</question> 
        <order>2</order> 
        <options> 
         <optionsBlock> 
         <optionName>PHP</optionName> 
         <order>1</order> 
         </optionsBlock> 
         <optionsBlock> 
         <optionName>Perl</optionName> 
         <order>2</order> 
         </optionsBlock> 
        </options> 
        </questionBlock> 
       </questions> 
       </positions> 
      </root> 

У меня есть дополнительный ЗЕЬЕСТ здесь:

SELECT C.[groupName], 
          C.[order], 
         FROM internshipProfGroups AS C 
         WHERE questionID = B.[id] 
         FOR XML PATH ('groupBlock'), TYPE, ELEMENTS, ROOT ('groups') 

Что я пытаюсь получить для генерации XML в корне «QuestionBlock» следующим образом:

  <questionBlock> 
      ... 

      <groups> 
       <groupBlock> 
        <groupName>Testing</groupName> 
       </groupBlock> 
       <groupBlock> 
        <groupName>Another Test</groupName> 
       </groupBlock> 
      </groups> 

      ... 
      </questionBlock> 

Я изо всех сил пытаюсь получить утверждение в правильной области, чтобы произвести это. Любая помощь в том, что мне может не хватать?

ответ

1

Если я хорошо понял, что вам нужно вставить второй запрос на тот же уровень, что «SELECT D. [Optionname]» (и я думаю, что у вас есть какая-то ошибка в коде):

SELECT 
    A.[id], 
    A.[positionTitle], 
    (SELECT B.[id], 
      B.[question], 
      B.[ord], 
      (SELECT D.[optionName], 
         D.[ord] 
      FROM  internshipProfOptions AS D 
      WHERE questionID = B.[id] 
      ORDER BY D.[ord] ASC 
      FOR  XML PATH ('optionsBlock'), TYPE, ELEMENTS, ROOT ('options')), 
      (SELECT C.[groupName], 
         C.[ord] 
      FROM internshipProfGroups AS C 
      WHERE questionID = B.[id] 
      FOR XML PATH ('groupBlock'), TYPE, ELEMENTS, ROOT ('groups')) 
    FROM  internshipProfQuestions AS B 
    WHERE positionID = A.[id] 
    ORDER BY B.[ord] ASC 
    FOR  XML PATH ('questionBlock'), TYPE, ELEMENTS, ROOT ('questions')) 
FROM internships A 
WHERE A.[id] = 3 
ORDER BY closeDate ASC 
FOR  XML PATH ('positions'), TYPE, ELEMENTS, ROOT ('root'); 

WORKING SAMPLE

То, что дает следующий результат:

<?xml version="1.0"?> 
<root> 
    <positions> 
     <id>3</id> 
     <positionTitle>Trimepost</positionTitle> 
     <questions> 
      <questionBlock> 
       <id>2</id> 
       <question>What?</question> 
       <ord>1</ord> 
       <options> 
        <optionsBlock> 
         <optionName>Opt 2</optionName> 
         <ord>3</ord> 
        </optionsBlock> 
       </options> 
       <groups> 
        <groupBlock> 
         <groupName>ALPHA</groupName> 
         <ord>1</ord> 
        </groupBlock> 
        <groupBlock> 
         <groupName>BETA</groupName> 
         <ord>2</ord> 
        </groupBlock> 
       </groups> 
      </questionBlock> 
     </questions> 
    </positions> 
</root> 
Смежные вопросы