选择SQL to XML而不连接列

时间:2015-09-21 12:25:12

标签: sql sql-server

我有一个表需要转换为XML,但是使用相同的XML元素名称会整合尝试使用它的每一列的字符串。

SELECT  
    SKU [SKU]   
    , title [Title]     
    , URL [URL]     
    , promotionsURL1 [PROMOTIONS/URL]   
    , promotionsURL2 [PROMOTIONS/URL]   
    , promotionsURL3 [PROMOTIONS/URL]   
    , promotionsURL4 [PROMOTIONS/URL]   
    , promotionsURL5 [PROMOTIONS/URL]   
    , promotionsURL6 [PROMOTIONS/URL] 
FROM tblSLIRecommendations 
FOR XML PATH('SKU_TO_TUNE'), ROOT('RECOMMENDATION_TUNINGS')

这给了我XML结果

<SKU_TO_TUNE>
    <SKU>VS4111-546U135-U135</SKU>
    <Title>Twirly Swiggles</Title>
    <URL>http://www.sweetcandy.com/c-p/VS4111-546U135-U135</URL>
    <PROMOTIONS>
        <URL>http://www.sweetcandy.com/c-p/SA4211-472U135-U135http://www.sweetcandy.com/c-p/RK0179-000P143-P143http://www.sweetcandy.com/c-p/WJ4038-477U135-U135http://www.sweetcandy.com/c-p/HH3577-209U136-U136</URL>
    </PROMOTIONS>
</SKU_TO_TUNE>

虽然我更喜欢这样的输出但而不需要URL之后的数字

 <SKU_TO_TUNE>
    <SKU>VS4111-546U135-U135</SKU>
    <Title>Twirly Swiggles</Title>
    <URL>http://www.sweetcandy.com/c-p/VS4111-546U135-U135</URL>
    <PROMOTIONS>
      <URL1>http://www.sweetcandy.com/c-p/SA4211-472U135-U135</URL1>
      <URL2>http://www.sweetcandy.com/c-p/RK0179-000P143-P143</URL2>
      <URL3>http://www.sweetcandy.com/c-p/WJ4038-477U135-U135</URL3>
      <URL4>http://www.sweetcandy.com/c-p/HH3577-209U136-U136</URL4>
    </PROMOTIONS>
</SKU_TO_TUNE>

有没有简单的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

您希望将要输出的列嵌套为嵌套XML:

这是一个有效的例子:

IF OBJECT_ID('tempdb..#Promotions','U') IS NOT NULL
    DROP TABLE #Promotions

GO


CREATE TABLE #Promotions (
    SKU VARCHAR(MAX),
    Title VARCHAR(MAX),
    PromotionURl1 VARCHAR(MAX),
    PromotionURl2 VARCHAR(MAX),
    PromotionURl3 VARCHAR(MAX),
    PromotionURl4 VARCHAR(MAX),
)

INSERT #Promotions (SKU, Title, PromotionURl1, PromotionURl2, PromotionURl3, PromotionURl4)
    VALUES ('VS4111-546U135-U135', 'Twirly Swiggles', 'http://www.sweetcandy.com/c-p/SA4211-472U135-U135', 'http://www.sweetcandy.com/c-p/RK0179-000P143-P143', 'http://www.sweetcandy.com/c-p/WJ4038-477U135-U135', 'http://www.sweetcandy.com/c-p/HH3577-209U136-U136');


SELECT
    SKU,
    Title,
    (SELECT
        PromotionURl1 URL, NULL,
        PromotionURl2 URL, NULL,
        PromotionURl3 URL, NULL,
        PromotionURl4 URL
    FOR XML PATH ('Promotions'), TYPE)
FROM #Promotions
FOR XML PATH ('SKU_TO_TUNE'), ROOT ('RECOMMENDATION_TUNINGS')

给你以下输出:

<RECOMMENDATION_TUNINGS>
  <SKU_TO_TUNE>
    <SKU>VS4111-546U135-U135</SKU>
    <Title>Twirly Swiggles</Title>
    <Promotions>
      <URL>http://www.sweetcandy.com/c-p/SA4211-472U135-U135</URL>
      <URL>http://www.sweetcandy.com/c-p/RK0179-000P143-P143</URL>
      <URL>http://www.sweetcandy.com/c-p/WJ4038-477U135-U135</URL>
      <URL>http://www.sweetcandy.com/c-p/HH3577-209U136-U136</URL>
    </Promotions>
  </SKU_TO_TUNE>
</RECOMMENDATION_TUNINGS>