知识大全 使SQL Server数据支持 XML

Posted

篇首语:少壮不努力,老大徒伤悲。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使SQL Server数据支持 XML相关的知识,希望对你有一定的参考价值。

使SQL Server数据支持 XML  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  学习如何用SQL Server的XML特征为你的数据库提供新的功能     如果你在IT业工作 那么你很可能听说过XML 但如果你的工作主要与SQL Server有关 那么你可能并没有直接运用过XML XML已经是Web编程环境中的普遍的数据格式了 而且它也是 NET Framework中主要的底层技术之一 SQL Server以两种方式来支持XML 通过SQL Server本身的功能 以及通过发布称为SQLXML的额外的功能 SQLXML扩展了SQL Server 并提供了XML兼容性 在本月的专栏中 我将讲述SQL Server对XML的内置的支持 并讲述通过发布SQLXML而增加的一些功能(见 图 ) SQL Server支持XML就意味着 我们可以更有效地更新和读取数据了 我们不再需要将XML数据转换成数据库可以理解的另一种格式 或将XML数据从数据库转换成XML 而且 可供开发人员选择的方法也更多了 就是说 他们在访问数据方面更灵活了   对XML的宣传已经有很多了 所以重要的一点是要意识到它只是一门简单的技术 本质上 它是用来描述数据的一个标准的文件格式 (有关XML基础知识的更多的信息 请参阅工具条 XML )从发布SQL Server 的最初版本以来 对XML的支持就已经是SQL Server的一部分了 SQL Server不是通过提供一个方法保存XML文件来支持XML的 而是提供了一个到关系数据的接口 使你可以在表和其它数据库对象中读写XML数据 SQL Server所固有的XML功能包括 可以通过HTTP 模板查询 FOR XML子句和OPENXML()函数来访问SQL Server 接下来 我将讲述这些功能是如何运作的 以及它们可以如何使你的企业受益      图 提供 XML支持     要通过HTTP访问一个SQL Server数据库 你必须首先设置一个虚拟目录 这个虚拟目录在HTTP协议和一个特定的数据库之间提供了一个链接 设置虚拟目录时 我们需要用 Configure SQL XML Support In IIS 菜单条目 你可以在Window的Start菜单中的SQL Server菜单条目找到该项 通过该菜单条目 你就可以指定虚拟目录的名称 物理路径 服务器名称 数据库名称和注册信息 一旦你创建了一个虚拟目录 你就可以通过一个URL将查询发送到数据库了 如果你设置了一个叫做Northwind的虚拟目录 并在浏览器中输入了查//localhost/Northwind?sql=SELECT+*+FROM+Shippers+FOR+XML+AUTO ELEMENTS+&root=Shippers 它就会返回类似于 XML 工具条中的Shippers例子中的XML数据 与运用ADO或其它任何技术相比 HTTP查询会让我们更容易地来访问网站或Web应用程序的数据 对于一个简单的查询语句来说 HTTP查询会很好 但对于一个更复杂的查询来说 这种格式就会变得难以理解并很难管理了 这种方法也不安全 因为查询源代码是暴露给用户的 另外一种可选方法是在HTTP上调用一个模板查询 一个模板查询就是一个包含SQL查询的XML文件 模板作为文件保存在服务器上 因此 如果你在一个叫做GetShippers xml的模板中封装了Shippers SELECT查询 那么URL查询的形式就会是 模板也可以带有参数 当你的模板调用一个存储过程时 该功能会很有用 在URL查询和模板查询中 如果你想从查询返回一个HTML页面 那么你可以指定一个XSLT样式表 将它用于XML 模板查询是读取数据的一个更安全的方法 它可以被缓存以得到更好的性能     你也可以用FOR XML子句将数据读取成XML格式 该方法从SQL Server表中返回数据 你可以把它们看做是XML数据 你可以在一个SELECT语句中运用FOR XML子句 它有三种模式可以以不同的格式来返回XML RAW AUTO和EXPLICIT RAW模式将结果中的每个记录作为一个普通的行元素来返回 它被包含在一个<row/>标签中 并将每个列的值作为一个属性 AUTO模式将每个记录作为行元素返回 根据源表或视图对它进行命名 如果查询从一个表返回多个列 那么每个列的值就会被作为表元素的属性来返回 但最重要的是 如果你的SELECT语句执行了合并操作 那么AUTO模式就代表的是子行 它们作为元素嵌套在父行下 EXPLICIT模式有几个参数 你可以通过这些参数完全定义返回的XML的样式 你可以为每个元素定义标签 明确确定数据是如何嵌套的 FOR XML语句使我们不必再返回一个rowset 然后在客户端或中间层将它转换成XML了     OPENXML函数可以让你像操作一个表那样来运用XML数据 可以将它们转换成内存中的一个rowset 要运用OPENXML 首先要调用sp_xml_preparedocument存储过程 实际上 它将XML解析成一个数据树 并将那个数据的句柄传递到OPENXML函数 然后你就可以操作那个数据了 进行查询 将它插入到表中 等等 OPENXML函数可以带有三个参数 用于XML文档内部显示的句柄 一个rowpattern参数和一个flags参数 Rowpattern参数指定了应该返回原始的XML文档中的哪些节点 Flags参数指定了以属性为中心的映射(结果集中列名符合属性名)或以元素为中心的映射(结果集中列名符合元素名) 在处理完XML数据后 我们可以调用sp_xml_removedocument将XML数据从内存中删除   通过SQLXML得到更多的支持     通过发布SQLXML(也被称为Web版) Microsoft也在SQL Server中提供了更多的XML支持 已经有三个SQLXML的版本了 它们包含的一些额外的功能有updategram和XML Bulk Load 你可以在线下载最新的版本SQLXML (见资源) 你可以通过基于XML的模板 运用updategram来插入 更新或删除表中的数据 该模板有一个before block 它描述了记录更新前的当前状态 还有一个after block 它描述了记录的变化 下面就是updategram的一个例子 它修改了Shippers表中的一个公司的Phone字段      在缺省情况下 updategrams认为before block和after block中的字段指的是表和列 但updategrams也可以用一个mapping schema Mapping schema将一个XML文档中的元素与一个表中的元素关联了起来 如果在上面的模板中 你引用属性名SID 而不是ShipperID 那么mapping schema就会将SID映射到ShipperID列 你可以通过HTTP(同模板查询一样)或通过ADO将updategrams发送到SQL Server 它们也可以被参数化 带有输入值 Updategrams提供了一个方法 使我们可以直接从XML更新SQL Server数据 这样就不用从XML文档得到数据 然后再用一个记录集或调用一个存储过程了 Updategrams只是可以简单地插入 更新或删除数据 所以如果你需要查看一个值是否存在 或在更新前查看一些商业规则 那么你就应该用OPENXML     虽然你可以用OPENXML函数和updategrams来插入数据 但对于加载大量的XML数据来说 这两种方法都不实用 你应该用XML Bulk Load将大量的XML数据插入到SQL Server表中 实际上 我们是用SQLXMLBulkLoad组件来加载数据的 你可以从一个客户端应用程序来调用这个组件 在建立到数据库的连接后 bulk load组件需要一个路径来访问mapping schema 从而将XML属性和元素映射到数据库对象 而且还需要路径来访问一个XML文档或一个XML流 在Bulk Load组件中 你可以指定是否执行数据表检查约束(check constraint) 是否忽略通过复制键添加的记录 当插入数据时 是否应该锁定数据表 等等     缺省情况下 大量加载不是事务处理型(transactional)的 所以如果出现错误 截止到错误点前插入的数据就会保留在数据库中 你可以指定所有加载的数据都是在一个单独的事务处理过程中的 因此该过程要么会十分成功 要么会回滚 如果你用了事务处理 所有的数据在插入前都会被写进一个临时的文件 这就意味着 你需要足够的磁盘空间来保存临时文件 而且加载数据可能会相当慢 XML Bulk Load给我们提供了一个很好的方法 使我们可以将大量的数据写到SQL Server中 否则 你就必须提取数据 然后用另外的方法将它加载到你的数据库中     你也可以配置SQL Server来缓存XSLT样式表 模板和mapping schema 从而得到更好的性能 根据具体实现情况 你可以在Web应用程序中用通过HTTP和XSLT的XML查询来替代标准的ASP/ADO数据访问 从而得到HTML输出结果 这种方法可以极大地提高性能     以上就是SQL Server对XML的一些高级支持 不管我们对它的宣传有多少 XML的功能就这么多了 因为XML是用来显示数据的一个标准 也是用于 NET的数据传输技术 因此 XML与SQL Server的集成能力就会是企业需要解决的一个重要的问题 cha138/Article/program/SQLServer/201311/22082

相关参考

知识大全 SQL Server2005的XML数据类型之基础篇[2]

SQLServer2005的XML数据类型之基础篇[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 SQL Server2005的XML数据类型之基础篇[4]

SQLServer2005的XML数据类型之基础篇[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 SQL Server2005的XML数据类型之基础篇[1]

SQLServer2005的XML数据类型之基础篇[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 SQL Server2005的XML数据类型之基础篇[3]

SQLServer2005的XML数据类型之基础篇[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 SQL Server读取XML文件的做法

SQLServer读取XML文件的做法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  SQLSe

知识大全 如何将 XML 文件导入 SQL Server 2000

如何将XML文件导入SQLServer2000  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  导

知识大全 获得XML格式的SQL Server图表结构

获得XML格式的SQLServer图表结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  程序员

知识大全 使用Microsoft SQL Server 2000的XML查询

使用MicrosoftSQLServer2000的XML查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 SQL Server 2000中生成XML的小技巧

SQLServer2000中生成XML的小技巧  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 SQL Server 2000 XML之七种兵器的说明

SQLServer2000XML之七种兵器的说明  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!