TSQL格式查询输出
我有一个为我生成XML输出的存储过程 SP如下所示: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],
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>