TSQL格式查询输出

TSQL格式查询输出,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个为我生成XML输出的存储过程 SP如下所示: ALTER PROCEDURE [dbo].[InternFetchProf] @positionID INT='' AS BEGIN SET NOCOUNT ON; BEGIN SELECT A.[id], A.[positionTitle], (SELECT B.[id], B.[question],

我有一个为我生成XML输出的存储过程

SP如下所示:

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
这为我提供了

                      <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>
我试图在“QuestionBlock”的根中生成XML,如下所示:


...
测试
另一个测试
...

我正努力在正确的领域发表这一声明。关于我可能缺少的内容,有什么帮助吗?

如果我理解得很好,您需要在“选择D.[OptionName]”的同一级别插入第二个查询(我还认为您的代码中有一些错误):

这就产生了这样的结果:

<?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>

3.
三位一体
2.
什么?
1.
选择2
3.
阿尔法
1.
贝塔
2.
            <questionBlock>
            ...

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

            ...
            </questionBlock>
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'); 
<?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>