- create table test
- (keyId int identity,
- sort nvarchar(10),
- info nvarchar(30)
- )
- insert into test(sort,info)
- values('衣服','A号'),
- ('衣服','B号'),('衣服','C号'),
- ('鞋子','D'),('鞋子','E'),
- ('鞋子','F')
- go
-
- ---使用explicit模式查询数据,必须指定特定的格式,sql脚本会根据特定模式生成相应的xml。
- ---使用explicit模式查询数据注意事项:
- /*
- 返回第一列必须为:当前元素的行号,列名必须为"Tag",数据类型需为整型,
- 数值为1代表第一层元素,数值为2代表第二层元素
- 返回第二列为父级元素的编号,,列名必须为"Parent" ,Tag同Parent之间形成一个上下级的关系,
- parent中必须有元素为null或0,代表顶层元素。
- */
- -----例:
-
- SELECT
- 1 AS Tag,--Tag 列必须存在,1表示第一层节点
- NULL AS Parent,--Parent 列必须存在, null代表第一级别
- 3 AS [node!1]
- --"node!1"表示根节点 此种形式代表的是根节点。
- --"node" 节点标签名称 元素名称
- --"1" 节点层次
- FOR XML EXPLICIT
- ---------------------------------------------------------
- /*
- [node!2!id!ELEMENT]
- node 代表的是节点名称;
- 2代表的节点层次;
- keyId 表示的是元素名称;.
- ELEMENT 选项表示向 <node> 元素添加了
- <keyId>元素子级,而不是添加属性
- */
-
- SELECT
- 1 AS Tag,
- NULL AS Parent,
- 8 AS [root!1],
- 88 AS [node!2!id!ELEMENT]
- FOR XML EXPLICIT
- ---------------------
- SELECT
- 1 AS Tag,
- NULL AS Parent,
- 8 AS [root!1],
- null AS [node!2!keyId!ELEMENT]
- UNION ALL
- SELECT
- 2 AS Tag,--表示第二层
- 1 AS Parent,--指向父节点 tag=1
- NULL ,
- keyId
- FROM test ---WHERE keyId=1
- FOR XML EXPLICIT
-
- SELECT
- 1 AS Tag,
- NULL AS Parent,
- 8 AS [root!1],
- null AS [node!2!keyId!ELEMENT],
- null AS [nodeExtend!3!sort!ELEMENT]
- UNION ALL
- SELECT
- 2 AS Tag,--表示第二层
- 1 AS Parent,--指向父节点 tag=1
- NULL ,
- keyId,
- null
- FROM test WHERE keyId=1
- union all
- SELECT
- 3 AS Tag,--表示第二层
- 2 AS Parent,--指向父节点 tag=1
- NULL ,
- keyId,
- sort
- FROM test WHERE keyId=2
-
- FOR XML EXPLICIT
- go
- truncate table test
- drop table test