mssql sqlserver for xml EXPLICIT 用法详解说明


摘要:
下文通过举例的方式,详细说明”for xml EXPLICIT”关键字的用法,如下所示:
实验环境:sql server 2008 R2


EXPLICIT的功能:将数据表采用特定的形式返回xml数据。

     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 选项表示向  元素添加了
元素子级,而不是添加属性
*/

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 
mssql_sqlserver_for_xml_EXPLICIT关键字举例应用

mssql_sqlserver_for_xml_EXPLICIT关键字举例应用