SQL Anywhere 16在线帮助文档地址:
http://dcx.sap.com/index.html#sa160/zh/sqlanywhere_zh16/help_top_index.htm
DECLARE @XML XML
//将表数据转换为XML形式
SELECT @XML = XMLELEMENT(NAME root, (SELECT * FROM Parms FOR XML RAW, ELEMENTS))
//这是基本形式,在查询中指定 FOR XML RAW 时,每一行都会表示为一个 <row> 元素,而每一列都是<row> 元素的一个属性
SELECT * FROM Parms FOR XML RAW
//ELEMENTS参数,让 FOR XML RAW 为结果中的每一列都生成一个 XML 元素,而不是生成一个属性。如果有 NULL 值,生成的 XML 文档中就会忽略该元素。FOR XML RAW 不会返回结构完好的 XML 文档,因为该文档没有单一的根节点。如果需要<root> 元素,可以使用 XMLELEMENT 函数插入一个
//解析XML
//例1:
SET @XML = '
<root>
<row></row>
<row></row>
<row></row>
</root>'
SELECT * FROM OPENXML(@XML,'/root/row') WITH (ParmName CHAR(50) 'ParmName',ParmVal CHAR(100) 'ParmVal')
//例2:
SET @XML = '
<row>row文本
<c1></c1>
<c2></c2>
<c3></c3>
</row>'
SELECT * FROM OPENXML(@XML,'/row') WITH (rowText CHAR(50) './text()', c1 CHAR(50) 'c1',c2 CHAR(100) 'c2')
//例3:可以通过LATERAL派生表功能,在表T1结果集的基础上,派生出从XMLCol解析出的C1字段,和表T1的结果集合并为一个结果集
SELECT * FROM T1,LATERAL(OPENXML(XMLCol,'/root') WITH (c1 VARCHAR(10) './c1')) c1 ,
OPENXML 运算符在查询的 FROM 子句中用于从 XML 文档生成结果集。OPENXML 使用 XPath查询语言的子集从 XML 文档中选择节点。使用 OPENXML 时,会对 XML 文档进行分析,而结果会采用树形式建模。这个树由节点组成。XPath 表达式用于选择树中的节点。以下列表介绍了一些常用的 XPath 表达式:
● / 指明 XML 文档的根节点
● // 指明根的所有下级节点,包括根节点
● . (一个句点) 指明 XML 文档的当前节点
● .// 指明当前节点的所有子代,包括当前节点
● .. 指明当前节点的父节点
● ./@attributename 指明名称为 attributename 的当前节点的属性
● ./childname 指明当前节点中名称为 childname 的子项
LATERAL:横向派生表
帮助原文:
可能包含对父语句中对象的引用(外部引用)的派生表、存储过程或连接表。要在 FROM 子句中使用外部引用,必须使用横向派生表。只能将外部引用用于 FROM 子句中位于横向派生表之前的表。例如,不能将外部引用用于 SELECT 列表中的项。表和外部引用必须用逗号分开。
汗……这个文档写的……简单来说,就是在T1表原有字段的基础上,在最右方添加LATERAL的字段,T1中的每一个会和LATERAL的每一行对应,可以通过多个LATERAL派生出多个字段。