SQL Server For XML PATH使用
For XML Path 语句可以将查询的数据集生成XML格式.
通过简单的XPath语法来允许用户自定义嵌套的XML结构、元素、属性值.
基础语法: select * from tablename for xml path ('node name' ) (可以自定义XML的节点名称).
1.创建测试数据表和数据的脚本
--1.Create table if exists (select 1 from sysobjects where id = object_id('tbOrder') and type = 'U') DROP TABLE tbOrder go CREATE TABLE tbOrder ( Id INT PRIMARY KEY IDENTITY(1,1), OrderCode VARCHAR(20) NOT NULL, TotalAmount DECIMAL(18,2), OrderDate DATETIME, OrderUser VARCHAR(20) ) -- Insert data INSERT INTO tbOrder(OrderCode,TotalAmount,OrderDate,OrderUser)VALUES('201301030001',500.00,GETDATE(),'user1') INSERT INTO tbOrder(OrderCode,TotalAmount,OrderDate,OrderUser)VALUES('201301070001',600.00,GETDATE(),'user2') INSERT INTO tbOrder(OrderCode,TotalAmount,OrderDate,OrderUser)VALUES('201301050001',300.00,GETDATE(),'user1') INSERT INTO tbOrder(OrderCode,TotalAmount,OrderDate,OrderUser)VALUES('201301040001',1200.00,GETDATE(),'user3') INSERT INTO tbOrder(OrderCode,TotalAmount,OrderDate,OrderUser)VALUES('201301030001',300.00,GETDATE(),'user2')
2. XML Path用法
(1)直接将数据集生成XML格式,并自定义节点名称为Order
SELECT * FROM dbo.tbOrder FOR XML PATH ('Order')
(2)利用XML Path 进行逗号分隔字符串
SELECT OrderCode + ',' FROM tbOrder FOR XML PATH('') --或者 DECLARE @str VARCHAR(2000) SET @str = '' SELECT @str = @str + OrderCode + ',' FROM tbOrder PRINT @str
输出的结果
201301030001,201301070001,201301050001,201301040001,201301030001,
(3)利用XML Path分组合并数据
SELECT s.OrderUser ,LEFT(b,LEN(b)-1) as OrderCode FROM ( SELECT OrderUser, ( SELECT OrderCode + ',' FROM tbOrder WHERE OrderUser=a.OrderUser FOR XML PATH('') ) AS b FROM tbOrder a GROUP BY OrderUser ) s
输出的结果如下
OrderUser OrderCode
user1 201301030001,201301050001 user2 201301070001,201301030001 user3 201301040001
3. 参考网址
http://www.cnblogs.com/doubleliang/archive/2011/07/06/2098775.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库