首页 > 数据库开发 > sql for xml: 生成树型结构的xml文件 (sql for xml to tree ) – keenweiwei的专栏 – 博客频道 – CSDN.NET

sql for xml: 生成树型结构的xml文件 (sql for xml to tree ) – keenweiwei的专栏 – 博客频道 – CSDN.NET

要得到

Channel

         account

               campaign

这样的树型Xml结构

表结构为:

注意:这里有4个 demo的sql语句,注意区分

[sql]

  1. ---- demo sql 1  
  2. --select ch.ChannelName as "@Text",  
  3. --       (select a.AccountName as "@Text",  
  4. --               (select c.CampaignName as "@Text"   
  5. --                from Campaign c  
  6. --                where c.AccountId = A.AccountId  
  7. --                FOR XML PATH('Campaign'), TYPE  
  8. --                )    
  9. --        from Account a  
  10. --        where a.ChannelId = ch.ChannelId  
  11. --        and a.AccountId <> 0  
  12. --        FOR XML PATH('Account'), TYPE  
  13. --        )  
  14. --from Channel ch  
  15. --where ch.ChannelId <> 0  
  16. --order by ChannelName  
  17. --FOR XML PATH('Channel'), ROOT('Tree')  
  18.   
  19.   
  20.   
  21. ---- demo sql 2  
  22. --select ch.ChannelName as ChannelName,  
  23. --       (select a.AccountName as AccountName,  
  24. --               (select c.CampaignName as CampaignName   
  25. --                from Campaign c  
  26. --                where c.AccountId = A.AccountId  
  27. --                FOR XML PATH('Campaign'),TYPE  
  28. --                )    
  29. --        from Account a  
  30. --        where a.ChannelId = ch.ChannelId  
  31. --        and a.AccountId <> 0  
  32. --        FOR XML PATH('Account'),TYPE  
  33. --        )  
  34. --from Channel ch  
  35. --where ch.ChannelId <> 0  
  36. --order by ChannelName  
  37. --FOR XML PATH('Channel'), ROOT('Tree')  
  38.   
  39.   
  40.   
  41. ---- demo sql 3  
  42. --;WITH XMLNAMESPACES (DEFAULT 'http://www.reuters.com/Datascope/ReportRequest.xsd')  
  43. --select ch.ChannelName as ChannelName,  
  44. --       (select a.AccountName as AccountName,  
  45. --               (select c.CampaignName as CampaignName   
  46. --                from Campaign c  
  47. --                where c.AccountId = A.AccountId  
  48. --                FOR XML PATH('Campaign'),TYPE  
  49. --                )    
  50. --        from Account a  
  51. --        where a.ChannelId = ch.ChannelId  
  52. --        and a.AccountId <> 0  
  53. --        FOR XML PATH('Account'),TYPE  
  54. --        )  
  55. --from Channel ch  
  56. --where ch.ChannelId <> 0  
  57. --order by ChannelName  
  58. --FOR XML PATH('Channel'), ROOT('Tree')  
  59.   
  60.   
  61.   
  62.   
  63. -- demo sql 4  
  64. declare @xml xml  
  65. declare @schemaVersion varchar(10)='5.1'    
  66.    
  67. set @xml=  
  68. (  
  69.     select ch.ChannelName as ChannelName,  
  70.            (select a.AccountName as AccountName,  
  71.                    (select c.CampaignName as CampaignName   
  72.                     from Campaign c  
  73.                     where c.AccountId = A.AccountId  
  74.                     FOR XML PATH('Campaign'),TYPE  
  75.                     )    
  76.             from Account a  
  77.             where a.ChannelId = ch.ChannelId  
  78.             and a.AccountId <> 0  
  79.             FOR XML PATH('Account'),TYPE  
  80.             )  
  81.     from Channel ch  
  82.     where ch.ChannelId <> 0  
  83.     order by ChannelName  
  84.     FOR XML PATH('Channel'), ROOT('Tree'),ELEMENTS XSINIL  
  85. )  
  86.   
  87. set @xml.modify('insert attribute schemaVersion{sql:variable(''@schemaVersion'')} as last into (/Tree)[1]')   --向根节点添加schemaVersion 属性  
  88. select @xml  
  89.   
  90. --SELECT CAST(   
  91. --CAST (('<?xml version="1.0" encoding="iso8859-1"?>'+ cast(@xml  varchar(max)) AS VARBINARY (MAX))   
  92. -- AS XML)  
  93.  --SELECT '<?xml version="1.0" encoding="iso8859-1"?>' + cast(@xml as varchar(max))  
  94.     
  95.   
  96.    
  97.   
  98.   
  99.    

生成内容为:


本文固定链接: http://www.devba.com/index.php/archives/5262.html | 开发吧

报歉!评论已关闭.