• 第二十八讲 SQLServer的内置XML支持


    * 摘要
    。SQLServer同内置XML支持
    。FOR XML
    。OPEN XML
    。SQLXML的使用

    * SQL Server2000中的XML支持
    。服务器支持:
    在服务器上,XML数据可以从表生成,并通过在SELECT语句中使用FOR XML子句来查询结果。FOR XML的逆函数是一个名为OPENXML的关系行集合生成器函数:它通过求XPath1.0表达式的值来从XML数据提取值,并将其放到行集合的列中。
    。客户端支持:
    SQL Server2000对客户端编程的支持称SQLXML。这项技术的核心是XML视图,它是XML架构和关系表之间的双向映射。XML视图允许使用XPath1.0的一个子集来进行查询,其中,可以使用映射将路径表达式转换成底层表中的SQL查询,并且将查询结果打包成XML结果。

    * FOR XML
    。SQL Server和XML之间的集成首要一点就是根据SQL数据创建XML文件。XML文件构造并不复杂,用简单的脚本和ADO记录集就可以轻松产生。这个任务虽然不算麻烦,但开发人却需要针对他们从服务器获取的结果集合产生不同的脚本,或者编写更为复杂通通用脚本。SELECT语句则由此而配备了新的FOR XML子句。

    。FOR XML-SQL SELECT 语句的FOR XML子句。该语句允许一个行集作为XML文档返回。
    。每个FORXML查询的结果都返回包含单行单列的行集,存储在该单行/列中的值是XML文档。在查询器中其列名为一个GUID前加一个前缀“XML_”组成。
    。由FOR XML子句产生的XML文档,在所产生的文档层次,每列转换的数据、二进制数据表示,所产生的XML schema以及和其和XML的细小

    差别等方面,可以高度自定义。

    * FOR XML语法
    。该子句的语法如下所示:
    [FOR {XML{RAW|AUTO|EXPLICIT}
    [,XMLDATA]
    [,ELEMENTS]
    [,BINARY BASE64]}]

    * FOR XML 模式
    FORXML从最简单到最复杂共有RAW,AUTO和EXPLICIT三种模式。这三种模式产生的SQL如下:
    。RAW-产生一个两维的XML网格,其中,行值(查询返回的)部包含在称为行(row)的元素里。查询所返回的每一个列值都由一个有一

    对行标记属性表示
    。AUTO-产生一个潜在的层次化XML文档,该文档中每一个列值(由查询返回)都包含在一个元素或属性中
    。EXPLICIT-在这种模式下我们可以指定用于包含由FOR XML EXPLICIT查询返回的列值的精确表单。列值可以作为属性或元素返回。该特

    征可基于各列指定。表示每一列的数据类型是可以具体指定的,正如我们可以指定为由查询产生的精确XML层次文档。

    * FOR XML EXPLICIT
    。FOR EXPLICIT查询是FORXML查询中最复杂,最个性化的一种。使用该查询可以为每个“表例”结指定XML数据层次结构中的具体位置。
    。FOR XML EXPLICIT查询利用per-column指令控制所产生数据的格式。该指令指定“表/列”对是否表示为XML元素或属性。这就意味着:

    数据表中的某列可能产生一个XML元素,而另一列则可能产生一属性。

    * FOR XML EXPLICIT
    。下面的FOR XML EXPLICIT查询SELECT语句掩饰了Northwind的Region数据表的RegionID列是怎样在同一个XML文档中既被 指定为属性又

    被指定为元素的:
    SELECT 1 AS Tag,
    0 AS Parent,
    RegionID AS [Region!1!RegionIDAsAttrbute],
    RegionID AS
    [Region!1!RegionIDAsElement!element]
    FROM Region
    FOR XML EXPLICIT

    * 三种模式优缺点
    。指定RAW模式时,查询结果集中每一个记录包含唯一的元素<row>。由于我们无法控制元素名字和文档结构,因此这种模式不是很有用。
    。指定AUTO模式时,虽然可以得到层次结构,但这种层次结构是线性的,即每个父节点只能有一个子节点,反之亦然;通过别名指定元素

    名字不太方便,而且有时候会影响查询命令本身的可读性:无法在文档中同时生成元素和属性。要么全部是元素(通过ELEMENTS关键词指

    定),要么全部是属性(默认)。
    。EXPLICIT模式比较复杂,我们将用另外一种方法来表达图1所显示的查询。这种方法使得我们能够完全地控制查询所生成的XML文档。

    * FOR XML EXPLICIT语法
    columnName
    AS[ContainedElementName!Tag!AttributeOrElementName!Directive]
    。ContainedElementName:包含一个列的元素名称
    。Tag:和各列相关的标签值
    。AttributeOrElementName:含有列数据的元素或者属性的名字
    。Directive:用来指定数据应采取的格式(hide,element,xml,xmltext,CDATA)

    * FOR XML EXPLICIT示例
    。-商店数据
    SELECT 1 as Tag,
    NULL as Parent,
    s.stor_id as [store!1!id],
    s.stor_name as [store!1!Name],
    NULL as [sale!2!OrderNo],
    NULL as [sale!2!Qty]
    FORM stores s
    UNION ALL

    -销售数据
    SELECT 2,1,
    s.stor_id,
    s.stor_name,
    sa.ord_num,
    sa.qty
    FROM stores s,sales sa
    WHERE s.stor_id=sa.stor_id
    ORDER BY [store!1!name]
    FOR XML EXPLICIT

    * FOR XML参数
    。ELEMENTS-只能应用于FOR XML AUTO查询,它指示为每列所返回的列值以XML文档中以一个元素表示,而不是作为一个属性(默认)。
    。BINARY BASE64-该选项使XML文档中的二进制数据被表示为BINARY BASE64编码。这种二进制数据一般都存在于BINARY,VARBINARY或IMAGE类型的列中。
    。XMLDATA:该选项为FORXML查询产生的XML文档产生一个XML数据模式。该模式是XML文档的预定义格式。

    * OPEN XML
    。OPENXML函数可以让你像操作一个表那样来运用XML数据,可以将它们转换成内存中的一个rowset.
    。打开这个行集后可以各种SQL语句进行操作。

    * OPEN XML 语法
    。OPENXML(idoc int[in],rowpattern navarchar[in],[flags byte[in]])[WITH(SechemaDEclaration|TableName)]
    。Idoc:int类型的输入参数,引用XML文档句柄,是利用sp_xml_preparedocument创建的
    。Rowpattern:navarchar类型的输入参数,XPATH模式,指定将XML文档的节点处理成行集。
    例如:N'/TOP/Region表明Region节点为要解释的XML文档的级别。
    。Flags:byte类型的输入参数,指示了如何将XML节点的类型解释该生集的列。0和1表明使用属性表示列,2表明使用元素表示列等。

    * With子句
    。WITH SchemaDeclaration:允许指定个模式
    。WITH TableName:将与特定数据表相关的模式应用于所指定的XML文档。常用选项

    * OPENXML使用步骤
    。首先要调用sp_xml_preparedocument存储过程,为其传递一个XML文档作为输入参数。该存储过程返回一个用于XML文档内部显示的句柄

    。调用OPENXML以分割XML文档,并创建一个行集。执行各种操作。
    。在处理完XML数据后,我们可以调用sp_xml_removedocument将XML数据从内存中删除。

    * SQLXML
    XML for SQL Server,又名SQLXML,可帮助开发人员在扩展标记语言(XML)和相关数据之间架设起沟通的桥梁。由于发布SQL Server2000时还没有Web Services,另外SQL Server 2000中内建的对XML的支持并非都遵循最新的W3C标准,所以SQLXML更象是一个补丁。

    * 访问SQLXML
    在SQL Server2000中,有两种访问SQlXML功能的主要方法:
    。HTTP访问:
    SQL Server 2000中的SQLXML功能也可以使用SQLXML ISAPI过滤器通过HTTP进行访问不。通过使用我们配置工具,您可以建立网站来检索传入请求,从页通过HTTP执行XML模板,XML视图之让的FOR XML和XPath1.0语句。
    。SQLXMLOLEDB Provider:SQLXMLOLEDB Provider是一个OLE DB提供程序,它通过ADO公开Microsoft SQLXML功能。

    * 使用HTTP访问
    SQL Server的多种方式
    。首先要使用IIS Virtual Directory Management 建立Virtual Directory和Virtual Name并且进行配置。
    。访问举例:
    http://localhost/Northwind?sql=select+*+FROM+Employees+FOR+XML+AUTO&root=root

    * 使用SQLXML Managed Classes
    。SqlXml数据提供程序没有实现Connection类,只实现了Command,Parameter以及Adapter类
    。SqlXml在Command对象上揭示了所有功能,从而允许使用流式输入,使用XPath查询,为XPath指定XML映射架构,添加XML根元素以及通过XSL样式进行后期处理。所有这些功能在其属性中得以设置。


     

  • 相关阅读:
    QGIS 编译
    Ubuntu: 无法使用su命令
    win7 与 Ubuntu 16.04 文件传送
    OSGEarth编译
    GADL配置编译
    C++ 类对象和 指针的区别
    C++ Primer Plus 第六版笔记
    Windows下使用doxygen阅读和分析C/C++代码
    _MSC_VER详细介绍
    LUA学习之一 初次接触
  • 原文地址:https://www.cnblogs.com/iceberg2008/p/1430781.html
Copyright © 2020-2023  润新知