for XML path 使用技巧

FOR XML PATH 是sqlserver數據庫的語法,能將查詢出的數據轉換成xml格式的數據.node

首先,咱們來看一個正常的查詢:mysql

SELECT TOP 2 id, name,crDate FROM sys.sysobjects  sql

 

查詢出的是表格形式數據, 若是改爲xml格式,則以下數據庫

 SELECT TOP 2 id, name,crDate FROM sys.sysobjects FOR XML PATH('')   sqlserver

 

 查詢xml格式的數據.而且都是拼接到一個字段中.spa

咱們還能夠給xml的node自定義名稱,知足業務需求.net

 

SELECT TOP 2   id AS IDs,result=  name+xtype,crDate FROM sys.sysobjects FOR XML PATH('')   server

 

 

path('')則是將每一行記錄包裹到一個節點中.名字就是括號內的文字.以下:xml

 

SELECT TOP 2 id, name,crDate FROM sys.sysobjects  FOR XML PATH('Row')   字符串

 

同理, ...FOR XML PATH('')  和 FOR XML PATH 是相等的. 都是不會將一行記錄包裹到對應的節點中.

 

轉義的問題:

SELECT 'ab<&c'   

SELECT 'ab<&c' FOR XML PATH('')   

 

數據庫中的數據會有一些符號,好比 URL的 &鏈接符, <>符號等. FOR XML PATH 會將其轉義成 &amp; 之類的文字.致使 從數據庫取出的URL地址失效.如何讓FOR XML PATH 不要轉義?

以下:

select  (SELECT 'ab<&c'  FOR XML PATH(''),TYPE).value('.','NVARCHAR(MAX)')  

 

這樣就能夠不轉義 for xml path 的查詢結果了

 

如何將多行數據合併到一行,並用分隔符隔開  

有時候須要獲取數據庫中的一些數據,將多個結果行合併到一個返回.

以下圖的數據

 

使用for xml path 返回都是xml格式的數據.頁面或者後臺處理比較麻煩. 須要獲取簡單的字符串格式, 方法以下,只須要簡單的用字符串分隔符加+列名便可

 

SELECT TOP 10    ','+name  FROM sys.sysobjects  FOR XML PATH('')  


相關文章
相關標籤/搜索