sqlserver FOR XML PATH 语句的应用

寂寞凝绝千秋雪

寂寞凝绝千秋雪

2016-02-19 10:22

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐sqlserver FOR XML PATH 语句的应用,无聊中的都看过来。
代码如下:

DECLARE @TempTable table(UserID int , UserName nvarchar(50));
insert into @TempTable (UserID,UserName) values (1,'a')
insert into @TempTable (UserID,UserName) values (2,'b')

select UserID,UserName from @TempTable FOR XML PATH
运行这段脚本,将生成如下结果:
代码如下:

row
UserID1/UserID
UserNamea/UserName
/row
row
UserID2/UserID
UserNameb/UserName
/row

大家可以看到两行数据生成了两个节点,修改一下PATH的参数:

select UserID,UserName from @TempTable FOR XML PATH('lzy')
再次运行上述脚本,将生成如下的结果:
代码如下:

lzy
UserID1/UserID
UserNamea/UserName
/lzy
lzy
UserID2/UserID
UserNameb/UserName
/lzy

可以看到节点变成,其实PATH() 括号内的参数是控制节点名称的,这样的话大家可以看一下如果是空字符串(不是没有参数)会是什么结果?

select UserID,UserName from @TempTable FOR XML PATH('')
执行上面这段脚本将生成结果:
代码如下:

UserID1/UserID
UserNamea/UserName
UserID2/UserID
UserNameb/UserName

这样就不显示上级节点了,大家知道在 PATH 模式中,列名或列别名被作为 XPath 表达式来处理,也就是说,是列的名字,这样大胆试验一下不给指定列名和别名会是怎么样?

select CAST(UserID AS varchar) + '',UserName + '' from @TempTable FOR XML PATH('')
运行上面这句将生成结果

1a2b

所有数据都生成一行,而且还没有连接字符,这样的数据可能对大家没有用处,还可以再变化一下:

select CAST(UserID AS varchar) + ',',UserName + '',';' from @TempTable FOR XML PATH('')
生成结果

1,a;2,b;

大家现在明白了吧,可以通过控制参数来生成自己想要的结果,例如:

select '{' + CAST(UserID AS varchar) + ',','"' +UserName + '"','}' from @TempTable FOR XML PATH('')
生成结果

{1,"a"}{2,"b"}

还可以生成其他格式,大家可以根据自己需要的格式进行组合。

下面是一个数据统计的应用,希望大家可以通过下面的实例想到更多的应用
代码如下:

DECLARE @T1 table(UserID int , UserName nvarchar(50),CityName nvarchar(50));
insert into @T1 (UserID,UserName,CityName) values (1,'a','上海')
insert into @T1 (UserID,UserName,CityName) values (2,'b','北京')
insert into @T1 (UserID,UserName,CityName) values (3,'c','上海')
insert into @T1 (UserID,UserName,CityName) values (4,'d','北京')
insert into @T1 (UserID,UserName,CityName) values (5,'e','上海')

SELECT B.CityName,LEFT(UserList,LEN(UserList)-1) FROM (
SELECT CityName,
(SELECT UserName+',' FROM @T1 WHERE CityName=A.CityName FOR XML PATH('')) AS UserList
FROM @T1 A
GROUP BY CityName
)


生成结果(每个城市的用户名)

北京 b,d
上海 a,c,e
展开更多 50%)
分享

猜你喜欢

sqlserver FOR XML PATH 语句的应用

编程语言 网络编程
sqlserver FOR XML PATH 语句的应用

动态SQL语句在SQLServer中非固定行的转列应用

编程语言 网络编程
动态SQL语句在SQLServer中非固定行的转列应用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQLServer 2008 Merge语句的OUTPUT功能

编程语言 网络编程
SQLServer 2008 Merge语句的OUTPUT功能

SQLServer 2005 列所有存储过程的语句

编程语言 网络编程
SQLServer 2005 列所有存储过程的语句

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MS SQLSERVER 中如何得到表的创建语句

SQLServer
MS SQLSERVER 中如何得到表的创建语句

sqlserver2005 xml字段的读写操作

编程语言 网络编程
sqlserver2005 xml字段的读写操作

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

绝对经典的滑轮新闻显示(javascript+css)实现

绝对经典的滑轮新闻显示(javascript+css)实现

win8玩游戏不能全屏怎么办

win8玩游戏不能全屏怎么办
下拉加载更多内容 ↓