如何使SQL Server数据库支持XML

股群238199397

股群238199397

2016-02-19 14:48

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的如何使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就意味着,我们可以更有效地更新和读取数据了;我们不再需要将XML数据转换成数据库可以理解的另一种格式,或将XML数据从数据库转换成XML。而且,可供开发人员选择的方法也更多了,就是说,他们在访问数据方面更灵活了。

  对XML的宣传已经有很多了,所以重要的一点是要意识到它只是一门简单的技术。本质上,它是用来描述数据的一个标准的文件格式。从发布SQL Server 2000的最初版本以来,对XML的支持就已经是SQL Server的一部分了。SQL Server不是通过提供一个方法保存XML文件来支持XML的,而是提供了一个到关系数据的接口,使你可以在表和其它数据库对象中读写XML数据。SQL Server所固有的XML功能包括:可以通过HTTP、模板查询、FOR XML子句和OPENXML()函数来访问SQL Server。接下来,我将讲述这些功能是如何运作的,以及它们可以如何使你的企业受益。


图1. 提供 XML支持

  要通过HTTP访问一个SQL Server数据库,你必须首先设置一个虚拟目录。这个虚拟目录在HTTP协议和一个特定的数据库之间提供了一个链接。设置虚拟目录时,我们需要用“Configure SQL XML Support In IIS”菜单条目,你可以在Window的Start菜单中的SQL Server菜单条目找到该项。通过该菜单条目,你就可以指定虚拟目录的名称、物理路径、服务器名称、数据库名称和注册信息。一旦你创建了一个虚拟目录,你就可以通过一个URL将查询发送到数据库了。如果你设置了一个叫做Northwind的虚拟目录,并在浏览器中输入了查询http://localhost/Northwind?sql=SELECT+*+FROM+Shippers+FOR+XML+AUTO,ELEMENTS+&root=Shippers,它就会返回类似于“XML 101”工具条中的Shippers例子中的XML数据。与运用ADO或其它任何技术相比,HTTP查询会让我们更容易地来访问网站或Web应用程序的数据。

  对于一个简单的查询语句来说,HTTP查询会很好,但对于一个更复杂的查询来说,这种格式就会变得难以理解并很难管理了。这种方法也不安全,因为查询源代码是暴露给用户的。另外一种可选方法是在HTTP上调用一个模板查询。一个模板查询就是一个包含SQL查询的XML文件。模板作为文件保存在服务器上。因此,如果你在一个叫做GetShippers.xml的模板中封装了Shippers SELECT查询,那么URL查询的形式就会是:http://localhost/Northwind/templates/GetShippers.xml。模板也可以带有参数,当你的模板调用一个存储过程时,该功能会很有用。在URL查询和模板查询中,如果你想从查询返回一个HTML页面,那么你可以指定一个XSLT样式表,将它用于XML。模板查询是读取数据的一个更安全的方法,它可以被缓存以得到更好的性能。

  你也可以用FOR XML子句将数据读取成XML格式,该方法从SQL Server表中返回数据,你可以把它们看做是XML数据。你可以在一个SELECT语句中运用FOR XML子句,它有三种模式可以以不同的格式来返回XML:RAW、AUTO和EXPLICIT。RAW模式将结果中的每个记录作为一个普通的行元素来返回,它被包含在一个标签中,并将每个列的值作为一个属性。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数据从内存中删除。

  通过SQL XML得到更多的支持

  通过发布SQLXML(也被称为Web版),Microsoft也在SQL Server中提供了更多的XML支持。已经有三个SQLXML的版本了,它们包含的一些额外的功能有updategram和XML Bulk Load。你可以在线下载最新的版本SQLXML 3.0(见资源)。你可以通过基于XML的模板,运用updategram来插入、更新或删除表中的数据。该模板有一个before block,它描述了记录更新前的当前状态;还有一个after block,它描述了记录的变化。下面就是updategram的一个例子,它修改了Shippers表中的一个公司的Phone字段:

updg:before
Shippers ShipperID="3" /
/updg:before
updg:after
Shippers Phone="(503) 555-0108" /
/updg:after
/updg:sync

  在缺省情况下,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输出结果,这种方法可以极大地提高性能。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  以上就是SQL Server对XML的一些高级支持。不管我们对它的宣传有多少,XML的功能就这么多了。因为XML是用来显示数据的一个标准,也是用于.NET的数据传输技术,因此,XML与SQL Server的集成能力就会是企业需要解决的一个重要的问题。

  关于作者

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  Dianne Siebold是San Diego一家软件公司的商业分析主管,也是位专门从事VB和SQL Server开发的程序员。她是VSM的定期撰稿人,也是Visual Basic Developer’s Guide to SQL Server (Sybex,2000)一书的作者。

展开更多 50%)
分享

猜你喜欢

如何使SQL Server数据库支持XML

编程语言 网络编程
如何使SQL Server数据库支持XML

使SQL Server数据支持 XML

SQLServer
使SQL Server数据支持 XML

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何转移SQL SERVER数据库

SQLServer
如何转移SQL SERVER数据库

SQL Server数据库检修

SQLServer
SQL Server数据库检修

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

SQL Server数据库导入MySQL数据库体验

MySQL mysql数据库
SQL Server数据库导入MySQL数据库体验

如何远程连接SQL Server数据库

MySQL mysql数据库
如何远程连接SQL Server数据库

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

什么时候不应该使用 XML(1)

什么时候不应该使用 XML(1)

SOAP ABC

SOAP ABC
下拉加载更多内容 ↓