SQL2005用XML数据类型进行数据建模
2007-05-19 09:42:35 来源:WEB开发网核心提示: CREATE XML INDEX idx_xCol_Property on T (xCol)USING XML INDEX idx_xCol FOR PROPERTY示例:基于值的查询在以下查询中,子代轴或自身轴 (//) 指定了部分路径,SQL2005用XML数据类型进行数据建模(6),
CREATE XML INDEX idx_xCol_Property on T (xCol)
USING XML INDEX idx_xCol FOR PROPERTY
示例:基于值的查询
在以下查询中,子代轴或自身轴 (//) 指定了部分路径,以便基于 ISBN 值的查找可以因为使用 VALUE 索引而受益:
SELECT xCol
FROM T
WHERE xCol.exist ('//book[@ISBN = "1-8610-0157-6"]') = 1
VALUE 索引按如下方式创建:
CREATE XML INDEX idx_xCol_Value on T (xCol)
USING XML INDEX idx_xCol FOR VALUE
XML 列上的全文索引
您可以在 XML 列上创建全文索引,从而将 XML 值的内容编入索引,而忽略 XML 标记。属性值没有被编入全文索引(因为它们被视为标记的一部分),并且元素标记被用作标记边界。在某些情况下,可以将全文搜索与 XML 索引用法结合起来:
• 首先,使用 SQL 全文搜索筛选感兴趣的 XML 值。
• 接下来,查询这些 XML 值,这会使用 XML 列上的 XML 索引。
示例:将全文搜索与 XML 查询结合起来
在 XML 列上创建全文索引之后,以下查询将检查 XML 值是否在书名中包含单词"custom":
SELECT *
FROM T
WHERE CONTAINS(xCol,'custom')
AND xCol.exist('/book/title/text()[contains(.,"custom")]') =1
CONTAINS() 方法使用全文索引,将文档中任何地方包含单词"custom"的 XML 值组合为一个子集。exist() 子句确保单词"custom"出现在书名中。
使用 CONTAINS() 和 XQuery contains() 的全文搜索具有不同的语义。后者是子字符串匹配,而前者则是使用单词衍生的标记匹配。因此,如果要搜索标题中的字符串 "run",则 "run"、"runs" 和 "running" 都将匹配,因为全文 CONTAINS() 和 Xquery contains() 都满足。然而,上述查询不匹配标题中的单词"customizable"。(全文 CONTAINS() 失败,而 Xquery contains() 被满足)。通常,对于纯粹的子字符串匹配,应该删除全文 CONTAINS() 子句。
[]
更多精彩
赞助商链接