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 會將其轉義成 & 之類的文字.致使 從數據庫取出的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('')