zoukankan      html  css  js  c++  java
  • 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 

    http://www.soft6.com/tech/16/161904.html 

  • 相关阅读:
    事务与隔离级别
    使用 Spring Boot 构建 RESTful API
    Dockerfile 指令详解
    Java 函数式编程--流操作
    Java ThreadLocal 的使用与源码解析
    node+express的html页面访问
    node+mysql数据库连接(入门)
    ensp的基础路由命令,接口,下一跳的配置,入门必备
    初识JSP/Severlet技术开发Web应用
    jQuery基础及选择器
  • 原文地址:https://www.cnblogs.com/johden2/p/2849640.html
Copyright © 2011-2022 走看看