Sql server的xml.value中, XPath使用text()函数的重要性

被多次问到,为什么在DBA的规范中,会要求在解析xml值时,value 方法的 XPath 中要加 text() 函数,看起来似乎加与不加得到的结果都是一样的。

下面的测试脚本说明使用 text() 的区别,以及为什么要求使用它。

DECLARE
    @xml xml

SET @xml = N’
<a/>
<b>b
    <c>c</c>
</b>’;
SELECT  @xml.value(‘(/a)[1]‘, ‘varchar(10)’);
SELECT @xml.value(‘(/a/text())[1]‘, ‘varchar(10)’);

SELECT @xml.value(‘(/b)[1]‘, ‘varchar(10)’);
SELECT @xml.value(‘(/b/text())[1]‘, ‘varchar(10)’);

执行这个脚本,从结果中,可以看出明显的区别

 

通过对比执行计划,可以看出两者的执行有明显的差别,效率也有明显的差异。不使用 text() 的情况下,需要额外的执行步骤用于检索子结点的数据(就算子结点,开销仍然存在)。

所以,如果不是有特殊目的,应该在 XPath 中指定 text() 函数实现精确定位,以此来降低性能开销。

 

 

时间: 2024-09-13 08:15:20

Sql server的xml.value中, XPath使用text()函数的重要性的相关文章

SQL Server 2000 XML之七种兵器

server|xml XML,已成为近来最热门的Web技术,它是SQL Server 2000中的重要部分.本文将综合七条SQL Server 2000中最重要的XML综合特性组成XML之七种兵器. 兵器之一:FOR XML 在SQL Server 2000中,标准的T-SQL SELECT语句包括FOR XML子句,它以XML文档形式返回一个查询结果.新的FOR XML子句有三种模式--RAW,AUTO,和EXPLICIT,每个都能对XML文档格式提供附加标准的控制. 下面首先介绍"FOR X

浅析sql server对xml简单操作教程

SQL Server 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB). 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中. 随着SQL Server 对XML字段的支持,相应的,T-SQL语句

SQL Server和XML的集成

server|sql|xml XML可谓最新的数据存储解决方案了.XML相比HTML给予了Web开发人员更大的编程灵活性.这种新技术驱动开发机构尝试把XML同自己的产品集成起来.微软就是采取如此举措的先驱者.微软公司在开发Internet产品的时候一度慢慢腾腾,现在可就不同了.最近一位微软公司的高级职员就这样说:"你要给我们一刀,伤口里出来的尽是XML."也许形容得有点过分,但事实确实是这样的:微软的几乎所有产品中都能看到XML的身影.举个例子:微软是如何在其SQL Server产品线

SQL Server和XML的集成(1)

server|xml SQL Server和XML的集成 作者: BUILDER.COMWednesday, June 19 2002 10:11 AM XML可谓最新的数据存储解决方案了.XML相比HTML给予了Web开发人员更大的编程灵活性.这种新技术驱动开发机构尝试把XML同自己的产品集成起来.微软就是采取如此举措的先驱者.微软公司在开发Internet产品的时候一度慢慢腾腾,现在可就不同了.最近一位微软公司的高级职员就这样说:"你要给我们一刀,伤口里出来的尽是XML."也许形容

灵活运用 SQL SERVER FOR XML PATH

原文:灵活运用 SQL SERVER FOR XML PATH         FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作.那么以一个实例为主.         一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如下:        

SQL Server解析XML数据的方法详解_MsSql

本文实例讲述了SQL Server解析XML数据的方法.分享给大家供大家参考,具体如下: --5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name="Email">dongsheng@xxyy.com</Info> <Info Name="Phone">678945546</

SQL Server解析XML数据的方法详解

本文实例讲述了SQL Server解析XML数据的方法.分享给大家供大家参考,具体如下: --5.读取XML --下面为多种方法从XML中读取EMAIL DECLARE @x XML SELECT @x = ' <People> <dongsheng> <Info Name="Email">dongsheng@xxyy.com</Info> <Info Name="Phone">678945546</

无法在 SQL Server 2005 Manger Studio 中录入中文的

问题表现:在 SQL Server 2005 Manger Studio中打开表,无法输入中文,只能输入英文 问题重现:1. 我们建立如下三个测试表:CREATE TABLE ta(    id int IDENTITY,    col varchar(50)) CREATE TABLE tb(    col varchar(50),    id int IDENTITY) CREATE TABLE tc(    col1 varchar(50),    col2 as col1) 2. 在SQ

数据存储-sql server在同一表中筛选出两次刷卡记录时间大于等于40分钟的员工数据

问题描述 sql server在同一表中筛选出两次刷卡记录时间大于等于40分钟的员工数据 刷卡进出数据存储在同一表中,姓名有重复的,一个人可能刷了2次,要求选出在时间段2014-12-28 11:00:00到2014-12-28 13:00:00内两次刷卡记录时间间隔大于等于40分钟的员工 logtime (时间 )logcard (卡号 )logid () logname(姓名) logbm (部门) 解决方案 ```select * from 同一表 a where logtime betw