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('')