摘要:
下文通过举例的方式,详细说明"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 选项表示向 <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