如何从MSSQL或者Access自动将表导出到正确的XML文件中?
我们有一个客户要求XML格式的数据。通常,这不是必需的,因为我们通常只交出一个Access数据库或者csv文件,这就足够了。但是,在这种情况下,我需要自动从十几个表中导出适当的XML。
如果我可以在SQL Server 2005之外做到这一点,那将是首选。但是,我一生无法找到实现此目标的方法。我可以转储原始xml数据,但这只是每行带有属性值的标签。我们需要一些代表表结构的东西。 Access具有xml格式的导出文件,可以满足我们的需求。但是我不确定如何将其自动化。它似乎无法通过SQL以任何方式使用,因此我试图跟踪必要的代码以通过宏或者vbscript导出XML。
有什么建议?
解决方案
这里有一个宏的概述,该宏用于将数据从Access db导出到xml文件,这可能对我们有用。
Const acExportTable = 0 Set objAccess = CreateObject("Access.Application") objAccess.OpenCurrentDatabase "C:\Scripts\Test.mdb" 'Export the table "Inventory" to test.xml objAccess.ExportXML acExportTable,"Inventory","c:\scripts\test.xml"
我可以想到的最简单的方法是创建一个小型应用程序来为我们完成此任务。我们可以将其作为基本的WinForm,然后仅使用LinqToSql dbml类来表示数据库。大多数时候,我们可以使用XmlSerializer命名空间来序列化那些对象。有时候,这要比数据库的难度大得多,具体取决于数据库的复杂性。请查看此帖子,以获取有关LinqToSql和Xml序列化的一些详细信息:
http://www.west-wind.com/Weblog/posts/147218.aspx
希望能有所帮助。
研究使用FOR XML AUTO。根据要求,我们可能需要使用EXPLICIT。
作为一个简单的例子:
SELECT * FROM Customers INNER JOIN Orders ON Orders.CustID = Customers.CustID FOR XML AUTO
这将生成带有客户内部订单的嵌套XML文档。然后,我们可以使用SSIS轻松将其导出到文件中,我认为。我自己还没有尝试过。
如果要使用文档而不是片段,则可能需要分两部分的解决方案。但是,这两个部分都可以在SQL Server中完成。
从Tom条目的注释中看,就像我们找到了ELEMENTS参数一样,因此我们将字段作为子元素而不是属性。但是,我们仍然会得到一个片段,因为我们将不会获得根节点。
我们可以通过不同的方式来处理此问题。 SQL Server提供了一种使用XSLT转换XML文档的方法,因此我们可以创建XSL样式表以将查询结果包装在根元素中。我们还可以添加客户架构所需的其他任何内容(假设他们有一个)。
如果我们想将某些字段保留为属性并创建其他元素,则还可以使用XSLT来移动这些字段,因此最终可能会得到如下所示:
<customer id="204"> <firstname>John</firstname> <lastname>Public</lastname> </customer>