Sql server—— for xml path簡單用法


 FOR XML PATH ,其實它就是將查詢結果集以XML形式展現,將多行的結果,展示在同一行。

FOR XML子句有四種最基本的模式:

  1、AUTO模式:返回數據表為起表名的元素,每一列的值返回為屬性;

  2、RAW模式:返回數據行為元素,每一列的值作為元素的屬性;

  3、PATH模式:通過簡單的XPath語法來允許用戶自定義嵌套的XML結構、元素、屬性值

  4、EXPLICIT模式:通過SELECT語法定義輸出XML的結構

數據表——

CREATE TABLE [dbo].[tb](
[id] [varchar](3) NULL,
[pid] [varchar](3) NULL,
[name] [varchar](10) NULL
) ON [PRIMARY]

GO

插入數據——

 

--創建表,插入數據

insert into tb values('001' , null  , '廣東省')
insert into tb values('002' , '001' , '廣州市')
insert into tb values('003' , '001' , '深圳市')
insert into tb values('004' , '002' , '天河區')
insert into tb values('005' , '003' , '羅湖區')
insert into tb values('006' , '003' , '福田區')
insert into tb values('007' , '003' , '寶安區')
insert into tb values('008' , '007' , '西鄉鎮')
insert into tb values('009' , '007' , '龍華鎮')
insert into tb values('010' , '007' , '松崗鎮')
go

 for xml path簡單用法(可以按照分組把相同組的列中的不同的值,像字符串一樣拼接在一起顯示在分組之后的列中。)

查詢—— 

       1.把所有地區名稱集中顯示

       select  ','+name from tb  FOR xml path('') 

          結果如下:

       

 

 

       2. 根據pid 相同的字段分組,同一pid的地區名稱合並一起,並去重顯示

        SELECT  distinct  s.pid, (SELECT ',' + name FROM tb WHERE pid = s.pid FOR xml path (''))  as name FROM  tb s

          結果如下:(顯示內容第一字符會帶有 ’,‘ 逗號)

        

 

      3. 通過stuff 函數將第一字符的逗號去掉

      SELECT distinct s.pid, (stuff((SELECT ',' + name FROM tb WHERE pid = s.pid FOR xml path ('')),1,1,'')) as name   FROM tb s

          結果如下:

         

 

 

        *如果逗號是顯示在最末尾處,如下:    

         SELECT pid,(select name+',' from tb where tb.pid=a.pid FOR xml path('') ) AS Sname   FROM tb A   GROUP BY A.pid

         

 

        則通過以下處理:

         SELECT pid,LEFT(Sname,LEN(Sname)-1) as name FROM (

        SELECT pid, (select name+',' from tb where tb.pid=a.pid FOR xml path('') ) AS Sname

        FROM tb A
        GROUP BY A.pid
        ) B

 

       

 

    4.排序

SELECT pid AS '@bldid'
, 'true' AS '@checked'
,(
SELECT name AS 'roomid'
FROM tb
WHERE (tb.pid=a.pid)
FOR XML PATH (''), TYPE
)
FROM tb a
GROUP BY pid
FOR XML PATH ('build'), root('tjrooms')

如下:

 

 

 

 

將數據導出到XML文件

創建表——

create table xmltab (xtable varchar(max))

執行導出——
declare @strsql VARCHAR(4000)
declare @strPath VARCHAR(100)
declare @str VARCHAR(200)
SELECT @str= convert(varchar(12),getdate()-1,112)
SET @strPath='D:\XMLOutFile\'
SET @strPath+='B_'+@str
SET @strPath+='.XML' insert into TEST..xmltab values('<?xml version="1.0" encoding="GB2312"?>')
declare @x xml
set @x=( select pid, isnull(name,'''') AS rname from test..tb FOR XML PATH('roots'),TYPE , ELEMENTS ,ROOT('rootp')) insert into test..xmltab select cast(@x as varchar(max))
SET @strsql='bcp test.dbo.xmltab out '
SET @strsql+=@strPath
SET @strsql+=' -c -T -k -x'
exec master..xp_cmdshell @strsql

 

 

  

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM