我们有客户以XML格式请求数据。通常这不是必需的,因为我们通常只是交出Access数据库或csv文件,这就足够了。但是在这种情况下,我需要自动从十几个表中导出适当的XML。
如果我可以从SQL Server 2005中完成,那将是首选。但是我不能为我的生活找到办法做到这一点。我可以转储原始的xml数据,但这只是每行带有属性值的标记。我们需要一些代表表格结构的东西。 Access具有xml格式的导出,可满足我们的需求。但是我不确定这是如何自动化的。它似乎没有通过SQL以任何方式提供,所以我试图通过宏或vbscript来追踪导出XML的必要代码。
有什么建议吗?
答案 0 :(得分:1)
研究使用FOR XML AUTO。根据您的要求,您可能需要使用EXPLICIT。
作为一个简单的例子:
SELECT
*
FROM
Customers
INNER JOIN Orders ON Orders.CustID = Customers.CustID
FOR XML AUTO
这将生成一个嵌套的XML文档,其中包含客户内部的订单。然后,您可以使用SSIS将其导出到文件中,我认为很容易。我自己没试过。
答案 1 :(得分:1)
如果您想要一个文档而不是一个片段,您可能需要一个由两部分组成的解决方案。但是,这两个部分都可以在SQL Server中完成。
从Tom的条目评论看起来就像你找到了ELEMENTS参数一样,所以你将字段作为子元素而不是属性。但是,你仍然会得到一个片段,因为你不会得到一个根节点。
您可以通过不同的方式处理此问题。 SQL Server provides a method用于使用XSLT转换XML文档,因此您可以创建一个XSL样式表以将查询结果包装在根元素中。您还可以添加客户架构所需的任何其他内容(假设它们有一个)。
如果您想将某些字段保留为属性并创建其他元素,您还可以使用XSLT移动这些字段,因此最终可能会出现以下情况:
<customer id="204">
<firstname>John</firstname>
<lastname>Public</lastname>
</customer>
答案 2 :(得分:0)
用于将数据从访问数据库导出到xml文件的宏的大纲here,这可能对您有用。
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"
答案 3 :(得分:0)
我能想到的最简单的方法是创建一个小应用程序来为您完成。您可以将其作为基本的WinForm,然后只使用LinqToSql dbml类来表示您的数据库。大多数情况下,您可以使用XmlSerializer命名空间序列化这些对象。有时,根据数据库的复杂程度,它比这更困难。查看这篇文章,了解有关LinqToSql和Xml序列化的一些详细信息: http://www.west-wind.com/Weblog/posts/147218.aspx
希望有所帮助。