FOR XML PATH 是sqlserver數據庫的語法,能將查詢出的數據轉換成xml格式的數據.
首先,我們來看一個正常的查詢:
SELECT TOP 2 id, name,crDate FROM sys.sysobjects
查詢出的是表格形式數據, 如果改成xml格式,則如下
SELECT TOP 2 id, name,crDate FROM sys.sysobjects FOR XML PATH('')
查詢xml格式的數據.並且都是拼接到一個字段中.
我們還可以給xml的node自定義名稱,滿足業務需求
SELECT TOP 2 id AS IDs,result= name+xtype,crDate FROM sys.sysobjects FOR XML PATH('')
path('')則是將每一行記錄包裹到一個節點中.名字就是括號內的文字.如下:
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('')