zoukankan      html  css  js  c++  java
  • sql for xml 还有一种写法(採用 tag 与 union all,简洁易懂)

    sql for xml 还有一种写法(採用 tag 与 union all,简洁易懂)


    測试环境:sql 08, 08 R2, 2010,  2012, 2014 等

    declare @agent table
     (
     AgentID int,
     Fname varchar(5),
     SSN varchar(11)
     )
     
    insert into @agent
     select 1, 'Vimal', '123-23-4521' union all
     select 2, 'Jacob', '321-52-4562' union all
     select 3, 'Tom', '252-52-4563'
     
    declare @address table
     (
     AddressID int,
     AddressType varchar(12),
     Address1 varchar(20),
     Address2 varchar(20),
     City varchar(25),
     AgentID int
     )
     
    insert into @address
     select 1, 'Home', 'abc', 'xyz road', 'RJ', 1 union all
     select 2, 'Office', 'temp', 'ppp road', 'RJ', 1 union all
     select 3, 'Home', 'xxx', 'aaa road', 'NY', 2 union all
     select 4, 'Office', 'ccc', 'oli Com', 'CL', 2 union all
     select 5, 'Temp', 'eee', 'olkiu road', 'CL', 2 union all
     select 6, 'Home', 'ttt', 'loik road', 'NY', 3
     
    --SELECT
    --	1 AS Tag,
    --	NULL AS Parent,
    --	0 AS 'Agents!1!Sort!hide',
    --	NULL AS 'Agents!1!',
    --	NULL AS 'Agent!2!AgentID',
    --	NULL AS 'Agent!2!Fname!Element',
    --	NULL AS 'Agent!2!SSN!Element',
    --	NULL AS 'AddressCollection!3!Element',
    --	NULL AS 'Address!4!!xml',
    --	NULL AS 'Address!4!AddressType!Element',
    --	NULL AS 'Address!4!Address1!Element',
    --	NULL AS 'Address!4!Address2!Element',
    --	NULL AS 'Address!4!City!Element'
    --UNION ALL
    --	SELECT
    --	2 AS Tag,
    --	1 AS Parent,
    --	AgentID * 100,
    --	NULL, AgentID, Fname, SSN,
    --	NULL, NULL, NULL, NULL, NULL, NULL
    --FROM @Agent
    --UNION ALL
    --	SELECT
    --	3 AS Tag,
    --	2 AS Parent,
    --	AgentID * 100 + 1,
    --	NULL,NULL,NULL, 
    --	NULL,
    --	NULL,
    --	NULL, NULL, NULL, NULL, NULL
    --FROM @Agent
    --UNION ALL
    --SELECT
    --	4 AS Tag,
    --	3 AS Parent,
    --	AgentID * 100 + 2,
    --	NULL, NULL, NULL, NULL, NULL,
    --	'<!-- ' + AddressType + ' Address -->', AddressType, 
    --	Address1, Address2, City
    --FROM @Address
    --ORDER BY [Agents!1!Sort!hide]
    --FOR XML EXPLICIT
     
     
    SELECT
           1 AS Tag,
           NULL AS Parent,
           NULL AS [Agents!1!],
           NULL AS [Agent!2!AgentID],
           NULL AS [Agent!2!Fname!Element],
           NULL AS [Agent!2!SSN!Element],
           NULL AS [AddressCollection!3!Element],
           NULL AS [Address!4!AddressType!Element],
           NULL AS [Address!4!Address1!Element],
           NULL AS [Address!4!Address2!Element],
           NULL AS [Address!4!City!Element]
     
    UNION ALL
     
    SELECT
           2 AS Tag,
           1 AS Parent,
           NULL, AgentID, Fname, SSN,
           NULL,NULL, NULL, NULL, NULL
      FROM @Agent
     
    UNION ALL
     
    SELECT
           3 AS Tag,
           2 AS Parent,
           NULL,AgentID,NULL, NULL,
           NULL, NULL, NULL, NULL, NULL
     
      FROM @Agent
     
    UNION ALL
     
    SELECT
           4 AS Tag,
           3 AS Parent,
           NULL,AgentID,NULL,NULL,NULL,
           AddressType, Address1, Address2, City
     
      FROM @Address
     
     ORDER BY
           -- all properties of every agent
           -- (from tag 2 and 4: SSN, fname and adresses)
           -- will be sorted by agentID and combined into
           -- separate groups. It is necessary in same cases.
           [Agent!2!AgentID],
           [AddressCollection!3!Element], -- optional because NULL everywhere
           [Address!4!AddressType!Element]-- any ordering by elements of tag 4
     
    FOR XML EXPLICIT
     

    执行结果:


    文章来源:http://social.msdn.microsoft.com/Forums/sqlserver/zh-CN/97f79941-324e-479e-ba5b-851cc534ebe5/problem-in-for-xml-explicit-query?

    forum=sqlxml

  • 相关阅读:
    Selct 大全
    Web API
    其他
    ADO.NET Entity Framework
    ORACLE SQL前端补0的三种方式。
    linux常用命令
    oracle 创建修改 job
    oracle 如何恢复误删的表记录数据
    myeclipse上SVN代码合并详细步骤图解
    SVN创建资源与分支详解
  • 原文地址:https://www.cnblogs.com/llguanli/p/7352698.html
Copyright © 2011-2022 走看看