【问题标题】:Formatting sql correctly tp produce expected xml output正确格式化 sql tp 产生预期的 xml 输出
【发布时间】:2015-05-15 13:59:26
【问题描述】:

感谢一位 SO 用户,我在 FOR XML 方面取得了进展,但显然我的 sql 语法并没有完全正确。

假设我有以下sql

DECLARE @Uname VARCHAR(15) = 'Dom',
        @Pword VARCHAR(15) = 'Monty'

SELECT 
   RTRIM(@Uname) AS '@uname',
   RTRIM( @Pword) AS '@pword',
   (SELECT COALESCE(PortOfLanding,'') AS portOfLanding 
    FROM Landings.LandingHeaders  
    WHERE Posted = 0 
    FOR XML PATH('Sale')) 
FOR XML PATH('abc')

运行时会产生以下输出

<abc uname="Dom" pword="Monty">&lt;Sale&gt;&lt;portOfLanding&gt;GBHTG&lt;/portOfLanding&gt;&lt;/Sale&gt;&lt;Sale&gt;&lt;portOfLanding&gt;GBHTG&lt;/portOfLanding&gt;&lt;/Sale&gt;</abc>

我真正希望的是以下内容

<abc uname="Dom" pword="Python">
    <Sale portOfLanding= "GBHTG" />
    <Sale portOfLanding= "GBHTG"/>
</abc>

事实上,我想在 SQL 中添加第三部分,这样最终可能会得到像这样的 xml

<abc uname="Dom" pword="Python">
    <Sale portOfLanding= "GBHTG">
        <saleline detail="some value here" />
        <saleline detail="some value here" />
    <Sale/>
    <Salesnote portOfLanding= "GBHTG"/>
</abc>

有人能指出我在原始 SQL 查询中哪里出错了吗?

谢谢

【问题讨论】:

    标签: sql-server xml for-xml for-xml-path


    【解决方案1】:

    试试这个:

    DECLARE @Uname VARCHAR(15) = 'Dom',
            @Pword VARCHAR(15) = 'Monty';
    
    SELECT RTRIM(@Uname) AS '@uname',
           RTRIM( @Pword) AS '@pword', 
          (SELECT COALESCE(PortOfLanding,'') AS '@portOfLanding' 
           FROM Landings.LandingHeaders  
           WHERE Posted = 0 
           FOR XML PATH('Sale'), TYPE)
    FOR XML PATH('abc')
    

    您可以更深入地了解:

    SELECT RTRIM(@Uname) AS '@uname',
           RTRIM( @Pword) AS '@pword', 
          (SELECT COALESCE(PortOfLanding,'') AS '@portOfLanding',
                 (SELECT COALESCE(PortOfLanding,'') AS '@detail'
                  FROM Landings.LandingHeaders  
                  FOR XML PATH('SaleLine'), TYPE)
           FROM Landings.LandingHeaders  
           WHERE Posted = 0 
           FOR XML PATH('Sale'), TYPE)
    FOR XML PATH('abc')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 1970-01-01
      相关资源
      最近更新 更多