繁体   English   中英

SQL Server For XML PATH 嵌套没有发生

[英]SQL Server For XML PATH nesting is not happening

我正在尝试通过适当的嵌套以所需格式从某些变量中生成 XML。 在启动<SProc>元素之前,我无法关闭<ParamList>元素。 请帮我解决这个 SQL 语句。

我想要的输出是:

<AsyncRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SProc>dbo.usp_InsertUserPlay</SProc>
    <ParamList>
        <Param>Rocky</Param>
        <Param>Boxer</Param>
        <Param>SpaceX</Param>
        <Param xsi:nil="true" />
        <Param>0</Param>
    </ParamList>    
</AsyncRequest>

我的 SQL 代码及其输出不同:

Declare @requestMessage xml,
        @P1 nvarchar(20) = 'Rocky', 
        @P2 nvarchar(20) = 'Boxer', 
        @P3 nvarchar(20) = 'SpaceX'

select 
    @requestMessage = (select 'dbo.usp_InsertUserPlay',
                           (select @P1 as [Param], 
                                   @P2 as [Param],      
                                   @P3 as [Param],
                                   null as [Param],    
                                   0 as [Param]
                            FOR XML RAW('ParamList'), TYPE, Elements XSINIL)
                        FOR XML PATH ('SProc'), ROOT('AsyncRequest'), TYPE, ELEMENTS XSINIL)

select @requestMessage AS XML_Output

输出是:

<AsyncRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SProc>dbo.usp_InsertUserPlay
        <ParamList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <Param>Rocky</Param>
            <Param>Boxer</Param>
            <Param>SpaceX</Param>
            <Param xsi:nil="true" />
            <Param>0</Param>
        </ParamList></SProc>
</AsyncRequest>

你非常接近:

    select @requestMessage =    (select  'dbo.usp_InsertUserPlay' as [SProc],
                (select @P1 as [Param], 
                        @P2 as [Param],     
                        @P3 as[Param],                                  
                        null as [Param],    
                        0 as [Param]
                     FOR XML RAW('ParamList'), TYPE, Elements XSINIL)
           FOR XML PATH('AsyncRequest'), TYPE, ELEMENTS XSINIL)

诀窍在于,当您希望将存储过程的名称包装在元素中时,不提供列名会导致 SQL Server 将存储过程的名称作为原始元素内容插入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM