Как я могу автоматизировать экспорт таблиц в правильные файлы XML из MSSQL или Access?


1

У нас есть клиент, запрашивающий данные в формате XML. Обычно это не требуется, поскольку мы обычно просто передаем базу данных Access или файлы csv, и этого достаточно. Однако в этом случае мне нужно автоматизировать экспорт правильного XML из десятков таблиц.

Если это можно сделать из SQL Server 2005, это было бы предпочтительнее. Однако я не могу для жизни меня найти способ сделать это. Я могу сбросить необработанные XML-данные, но это всего лишь тег в строке с значениями атрибутов. Нам нужно что-то, что представляет структуру таблиц. Доступ имеет экспорт в формате xml, который соответствует нашим потребностям. Однако я не уверен, как это можно автоматизировать. Кажется, он не доступен каким-либо образом через SQL, поэтому я пытаюсь найти необходимый код для экспорта XML через макрос или vbscript.

Любые предложения?

0

Существует схема here макроса, используемого для экспорта данных из 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" 

0

Самый простой способ сделать это, о котором я могу думать, это создать небольшое приложение, чтобы сделать это за вас. Вы можете сделать это как базовый WinForm, а затем просто использовать класс dbml LinqToSql для представления вашей базы данных. В большинстве случаев вы можете просто сериализовать эти объекты с помощью пространства имен XmlSerializer. Иногда это сложнее, чем в зависимости от сложности вашей базы данных. Ознакомьтесь с этой записью для получения подробной информации о LinqToSql и Xml. Последовательность: http://www.west-wind.com/Weblog/posts/147218.aspx

Надеюсь, что это поможет.


1

Изучите использование FOR XML AUTO. В зависимости от ваших требований вам может потребоваться использовать EXPLICIT.

Как простой пример:

SELECT 
    * 
FROM 
    Customers 
INNER JOIN Orders ON Orders.CustID = Customers.CustID 
FOR XML AUTO 

Это создаст вложенный документ XML с заказами внутри клиентов. Вы могли бы использовать SSIS для экспорта этого файла в файл довольно легко, я бы подумал. Я сам не пробовал.

  0

Это не устает получить мне нужно, но я нашел статью о «FOR XML» в MSSQL2005, которая, я думаю, охватывает то, что мне нужно. 23 сен. 082008-09-23 19:58:10

  0

Я хотел сказать ... спасибо за то, что вы на правильном пути 23 сен. 082008-09-23 20:37:10


1

Если вам нужен документ вместо фрагмента, вам, вероятно, понадобится двухкомпонентное решение. Однако обе части могут быть выполнены в SQL Server.

Из комментариев к записи Тома, как вы нашли аргумент ELEMENTS, вы получаете поля как дочерние элементы, а не атрибуты. Однако вы все равно получите фрагмент, потому что вы не получите корневой узел.

Существуют различные способы справиться с этим. SQL Server provides a method для использования XSLT для преобразования XML-документов, поэтому вы можете создать таблицу стилей XSL, чтобы обернуть результат вашего запроса в корневой элемент. Вы также можете добавить что-то еще, что требует схема клиента (при условии, что она есть).

Если вы хотите оставить некоторые поля как атрибуты и сделать другие элементы, вы можете также использовать XSLT, чтобы переместить эти поля, так что вы могли бы в конечном итоге с чем-то вроде этого:

<customer id="204"> 
    <firstname>John</firstname> 
    <lastname>Public</lastname> 
</customer>