---
title: "使用 Altova 工具在 SQL Azure 云环境中处理 XML 数据"
date: "2010-07-12"
categories: 
  - "xquery"
tags: 
  - "altova-xmlspy"
  - "database-tool"
  - "databasespy"
  - "software-tools"
  - "sql-server"
  - "xml-editor"
  - "xmlspy"
  - "xquery"
description: 探索如何使用Altova的工具，如DatabaseSpy和XMLSpy，在SQL Azure中高效地管理XML数据，涵盖数据迁移、编辑和查询的方法。
---
Status: #blog

Tags:  #altova-xmlspy #database-tool #databasespy #software-tools #sql-server #xml-editor #xmlspy #xquery

Categories: [xpath+xquery](/blog/zh/category/xpathxquery.md)
# 使用 Altova 工具在 SQL Azure 云环境中处理 XML 数据

在之前的文章中，我们讨论了[如何使用 Altova DatabaseSpy 连接到 Microsoft SQL Azure 数据库](https://www.altova.com/blog/2010/07/connecting-databasespy-to-sql-azure.html)，并演示了本地数据库与迁移到 SQL Azure 的相同数据库之间的数据库结构比较和内容比较。 在本文中，我们将使用另一种方法将现有表迁移到 SQL Azure，并向您展示一些在云端使用 XML 的技巧。 我们首先在 SQL Azure 中创建了一个新的数据库结构。 然后，我们创建了一个[DatabaseSpy 项目](https://www.altova.com/zh/databasespy/database-projects.html)，该项目连接到运行 AdventureWorks 示例数据库的本地 SQL Server Express 副本，以及第二个连接到我们新的 SQL Azure 数据库结构。 

[![数据库Spy项目辅助窗口](https://lh3.ggpht.com/_REdrfeVqYdU/TDssD2aUxUI/AAAAAAAAAL4/m1k4DFnOmUk/AzureXML01_thumb%5B2%5D.gif?imgmax=800 "DatabaseSpy Project helper window")](http://lh4.ggpht.com/_REdrfeVqYdU/TDssDYHP9dI/AAAAAAAAAL0/Su9HjQ6mxG4/s1600-h/AzureXML01%5B4%5D.gif) 

AdventureWorks 数据库中包含一个名为 JobCandidate 的表，其中包含一些 XML 数据，我们将使用这些数据来构建一个模型，用于管理我们的 SQL Azure XML 内容。 

[![在 DatabaseSpy 在线浏览器的窗口中，显示了 AdventureWorks 数据库中的 JobCandidate 表](https://lh3.ggpht.com/_REdrfeVqYdU/TDssEmRxTCI/AAAAAAAAAMA/XoaMxpC3mFc/AzureXML02_thumb%5B3%5D.gif?imgmax=800 "AdventureWorks JobCandidate table in the DatabaseSpy Online Browser window")](http://lh3.ggpht.com/_REdrfeVqYdU/TDssEeZqVbI/AAAAAAAAAL8/ACDHhYF2vrY/s1600-h/AzureXML02%5B7%5D.gif) 

我们可以生成一个用于现有表的 `CREATE` 语句，将其作为 SQL Azure 版本的参考基础。 

[![用于创建现有 "JobCandidate" 表的 SQL 语句](https://lh3.ggpht.com/_REdrfeVqYdU/TDssFD0TAkI/AAAAAAAAAMI/HggxD6WMltU/AzureXML03_thumb%5B2%5D.gif?imgmax=800 "CREATE statement for the existing JobCandidate table")](http://lh4.ggpht.com/_REdrfeVqYdU/TDssE3BRRDI/AAAAAAAAAME/9_1gFQ_WY3c/s1600-h/AzureXML03%5B4%5D.gif) 

我们需要修改这个语句，使其能在我们的 Azure SQL 数据库中执行。除了更改数据库和模式名称之外，我们还会移除对“Employee”表的外部键约束，因为我们的新数据库中没有名为“Employee”的表。此外，[Azure SQL 不支持 "CONTENT" 关键字，](http://msdn.microsoft.com/en-us/library/ee336281.aspx)因此我们也会移除它。 

[![在 DatabaseSpy SQL 编辑器窗口中修改 CREATE 语句](https://lh6.ggpht.com/_REdrfeVqYdU/TDssF2JnhpI/AAAAAAAAAMQ/e4H62EHURno/AzureXML04_thumb%5B2%5D.gif?imgmax=800 "Modifying the CREATE statement in a DatabaseSpy SQL Editor window")](http://lh5.ggpht.com/_REdrfeVqYdU/TDssFhvzNGI/AAAAAAAAAMM/2n2dd-eigyg/s1600-h/AzureXML04%5B4%5D.gif) 

在确认“属性”窗口中，针对修改后的“CREATE”语句，指向的是 SQL Azure 数据库后，我们可以执行该语句。当我们在“在线浏览器辅助”窗口中刷新数据库并展开视图时，我们可以看到新创建的、空的表。 

[![新创建的表将在数据库浏览器窗口中显示](https://lh3.ggpht.com/_REdrfeVqYdU/TDssGugtpAI/AAAAAAAAAMY/BO5iQ8SryaA/AzureXML05_thumb%5B2%5D.gif?imgmax=800 "New table viewed in the DatabaseSpy Online Browser window")](http://lh3.ggpht.com/_REdrfeVqYdU/TDssGSKOlzI/AAAAAAAAAMU/Y8Ip3bTZ6OU/s1600-h/AzureXML05%5B4%5D.gif) 

通过比较现有表和新表的数据，我们可以创建一个脚本，将数据迁移到我们在 Azure SQL 云中的新表中。这类似于我们在之前的 SQL Azure 博文中介绍的数据比较方法，[但不同之处在于，我们不会直接合并数据，而是会将合并脚本保存下来](https://www.altova.com/blog/2010/07/connecting-databasespy-to-sql-azure.html)

[![数据库侦察工具的数据合并对话框](https://lh3.ggpht.com/_REdrfeVqYdU/TDssHWwqTaI/AAAAAAAAAMg/e1oZHzy7x2E/AzureXML06_thumb%5B2%5D.gif?imgmax=800 "DatabaseSpy Merge Data dialog")](http://lh3.ggpht.com/_REdrfeVqYdU/TDssHJsbkYI/AAAAAAAAAMc/z-ffuGYIhxA/s1600-h/AzureXML06%5B4%5D.gif) 

我们的第一次尝试运行合并脚本失败了，系统报错，提示SQL Azure无法在IDENTITY_INSERT设置为OFF时向新表中插入数据。我们可以修改合并脚本，添加一行代码来设置IDENTITY_INSERT为ON，然后重新执行： 

[![在数据库Spy的SQL编辑器窗口中查看合并数据的脚本](https://lh5.ggpht.com/_REdrfeVqYdU/TDssIUMkL5I/AAAAAAAAAMo/etCK1Qr0GdA/AzureXML07_thumb%5B2%5D.gif?imgmax=800 "Merge data script viewed in a DatabaseSpy SQL Editor window")](http://lh4.ggpht.com/_REdrfeVqYdU/TDssHlBKXOI/AAAAAAAAAMk/dHlCNTaS1po/s1600-h/AzureXML07%5B4%5D.gif) 

接下来，我们可以执行一个SELECT查询，以查看成功上传的数据。 

[![在DatabaseSpy中，可以选择查询并查看结果](https://lh4.ggpht.com/_REdrfeVqYdU/TDssJuaavxI/AAAAAAAAAMw/mHOLI4gHW2g/AzureXML08_thumb%5B2%5D.gif?imgmax=800 "Select query and Results viewed in DatabaseSpy")](http://lh5.ggpht.com/_REdrfeVqYdU/TDssJbu8M4I/AAAAAAAAAMs/8eZ3avCrjms/s1600-h/AzureXML08%5B4%5D.gif) 

“数据库侦察工具”中的“数据检查器”窗口，可以让我们更方便地查看宽列中的内容，非常适合用于检查存储在“新招聘候选人”表中的“简历”列中的XML文档。 

[![数据库Spy 数据检查器窗口](https://lh6.ggpht.com/_REdrfeVqYdU/TDssKVVdcnI/AAAAAAAAAM4/X9lKbVekCMg/AzureXML09_thumb%5B2%5D.gif?imgmax=800 "DatabaseSpy Data Inspector window")](http://lh5.ggpht.com/_REdrfeVqYdU/TDssJ2Lak8I/AAAAAAAAAM0/dGMjr437D4w/s1600-h/AzureXML09%5B4%5D.gif) 

**使用 XMLSpy 编辑 XML 数据** 如果您需要在 SQL Azure 数据库中修改、编辑、更新或验证 XML 数据，[Altova XMLSpy](https://www.altova.com/zh/xml-editor/) 提供了比 DatabaseSpy 更强大的 XML 编辑功能。我们可以通过 XMLSpy 连接到我们的 SQL Azure 数据库，并通过 [XMLSpy 数据库查询窗口](https://www.altova.com/zh/xmlspy/database-xml.html) 执行 SELECT 查询。XMLSpy 允许我们打开任何 XML 行进行直接编辑，并提供高级的 XML 编辑功能。

[![XMLSpy 数据库查询视图，用于在 Azure SQL 云中查看 XML 数据](https://lh3.ggpht.com/_REdrfeVqYdU/TDssLlYR3fI/AAAAAAAAANA/YcI5j9Ka4dg/AzureXML10_thumb%5B2%5D.gif?imgmax=800 "XMLSpy Database Query view of XML data in the SQL Azure cloud")](http://lh4.ggpht.com/_REdrfeVqYdU/TDssKld6cKI/AAAAAAAAAM8/PYbJaV5DOuA/s1600-h/AzureXML10%5B4%5D.gif) 

当然，XMLSpy 的文本视图和网格视图的所有常用功能都可用。 

[![XMLSpy 文本视图：在 SQL Azure 云环境中查看 XML 数据](https://lh6.ggpht.com/_REdrfeVqYdU/TDssMbC90PI/AAAAAAAAANI/9KBahBuL-14/AzureXML11_thumb%5B2%5D.gif?imgmax=800 "XMLSpy Text view of XML data in the SQL Azure cloud")](http://lh3.ggpht.com/_REdrfeVqYdU/TDssMK-TO1I/AAAAAAAAANE/L4f2m0KuAc0/s1600-h/AzureXML11%5B4%5D.gif) 

[![XMLSpy 在 SQL Azure 云环境中，以网格视图展示 XML 数据](https://lh4.ggpht.com/_REdrfeVqYdU/TDssNHtkC5I/AAAAAAAAANQ/rIdY9_dxz0c/AzureXML12_thumb%5B2%5D.gif?imgmax=800 "XMLSpy Grid view of XML data inthe SQL Azure cloud")](http://lh3.ggpht.com/_REdrfeVqYdU/TDssMiPlQtI/AAAAAAAAANM/DqK59yQWPtQ/s1600-h/AzureXML12%5B4%5D.gif) 

在您完成编辑后，通过选择“XMLSpy”软件中的“文件/保存”选项，可以将修改后的XML文档保存到云端SQL Azure数据库中的“JobCandidate”表格的相应行中。

[![XMLSpy 的“文件/保存”菜单选项可以将 XML 数据保存到 Azure SQL 云服务](https://lh4.ggpht.com/_REdrfeVqYdU/TDssNlI2VII/AAAAAAAAANY/LQZ-NHz48TE/AzureXML13_thumb%5B2%5D.gif?imgmax=800 "XMLSpy File / Save menu option saves XML data to the SQL Azure cloud")](http://lh6.ggpht.com/_REdrfeVqYdU/TDssNWuNvCI/AAAAAAAAANU/KY6tdkkJ-wc/s1600-h/AzureXML13%5B4%5D.gif) 

**使用 XQuery 解析 XML 数据** 您可以使用 XMLSpy 的 [XQuery 编辑器](https://www.altova.com/zh/xmlspy/xquery-editor.html)，它内置了对 XQuery 语法和上下文相关的辅助功能，从而构建 XQuery 语句，用于解析您 SQL Azure 数据库中的 XML 数据。以下 XQuery 语句从 XML 简历中提取并返回家庭地址，条件是 JobCandidateID 小于 7。 

[![XMLSpy 在 SQL Azure 中用于 XML 数据的 XQuery 编辑器 ](https://lh4.ggpht.com/_REdrfeVqYdU/TDssOsFWR2I/AAAAAAAAANg/znKFG7mDqm4/AzureXML14_thumb%5B2%5D.gif?imgmax=800 "XMLSpy XQuery editor for XML data in SQL Azure ")](http://lh6.ggpht.com/_REdrfeVqYdU/TDssOEXShdI/AAAAAAAAANc/PWoGe2ZL8dI/s1600-h/AzureXML14%5B4%5D.gif) 

XQuery 语句可以在“数据库查询”窗口中执行，并且结果会立即在 XMLSpy 中显示，供您进一步处理。 

[![XQuery 语句及其结果，显示在 XMLSpy 数据库查询窗口中](https://lh4.ggpht.com/_REdrfeVqYdU/TDssPUwP8oI/AAAAAAAAANo/XS8KMTciZPk/AzureXML15_thumb%5B2%5D.gif?imgmax=800 "XQuery statement and results inthe XMLSpy Database Query window")](http://lh5.ggpht.com/_REdrfeVqYdU/TDssO25KcBI/AAAAAAAAANk/TZB0OmZ1Ss0/s1600-h/AzureXML15%5B4%5D.gif) 

当然，XQuery 的结果也可以在文本视图或表格视图中进行编辑。 

[![XQuery 查询结果在 XMLSpy 的文本视图中显示](https://lh3.ggpht.com/_REdrfeVqYdU/TDssP7YsgqI/AAAAAAAAANw/egPoq6aQ2e0/AzureXML16_thumb%5B2%5D.gif?imgmax=800 "XQuery result in XMLSpy Text view")](http://lh5.ggpht.com/_REdrfeVqYdU/TDssPoUbWRI/AAAAAAAAANs/fZU5rG-51IA/s1600-h/AzureXML16%5B4%5D.gif) 

[![XQuery 查询结果在 XMLSpy 的网格视图中显示](https://lh4.ggpht.com/_REdrfeVqYdU/TDssQ5BJBrI/AAAAAAAAAN4/RKXallP0rDM/AzureXML17_thumb%5B2%5D.gif?imgmax=800 "XQuery result in XMLSpy Grid view")](http://lh6.ggpht.com/_REdrfeVqYdU/TDssQXEN4DI/AAAAAAAAAN0/tpRx1Mlabho/s1600-h/AzureXML17%5B4%5D.gif) 

您可以通过“数据库查询”窗口或“XML 编辑器”视图来保存查询结果。 亲自体验一下，通过使用 Altova 工具来处理 SQL Azure 云中的 XML 数据，您可以提高多少工作效率 [下载免费的30天试用版](https://www.altova.com/zh/download-trial/) 的 [Altova MissionKit 软件架构师版](https://www.altova.com/zh/missionkit/software-architects.html), 一套集成软件，包含 XMLSpy、DatabaseSpy 以及其他 XML、数据库和 UML 工具。
