MSSQL 또는 Access에서 테이블을 적절한 XML 파일로 내보내는 작업을 자동화하는 방법은 무엇입니까?


1

고객에게 XML 형식의 데이터를 요청하고 있습니다. 일반적으로 Access 데이터베이스 또는 CSV 파일을 전달하기 만하면되므로 일반적으로 필요하지 않습니다. 그러나이 경우에는 12 개의 테이블에서 적절한 XML 내보내기를 자동화해야합니다.

SQL Server 2005에서 수행 할 수 있다면 좋습니다. 그러나 나는이 일을 할 수있는 방법을 찾지 못합니다. 원시 XML 데이터를 덤프 할 수 있지만 이것은 속성 값을 가진 행당 태그 일뿐입니다. 우리는 표의 구조를 나타내는 무언가가 필요합니다. Access는 우리의 요구를 충족시키는 xml 형식으로 내보내기를 제공합니다. 그러나 이것이 어떻게 자동화 될 수 있는지는 잘 모르겠습니다. 그것은 SQL을 통해 어떤 식 으로든 사용할 수있는 것으로 보이지 않기 때문에 매크로 나 vbscript를 통해 XML을 내보내는 데 필요한 코드를 추적하려고합니다.

제안 사항?

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" 

0

제가 생각할 수있는 가장 쉬운 방법은 작은 응용 프로그램을 만들어 당신을 위해 그것을하는 것입니다. 당신은 기본 WinForm으로 그것을 할 수 다음 LinqToSql dbml 클래스를 사용하여 데이터베이스를 나타냅니다. 대부분의 경우 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

이 얻을 종료하지 않습니다 내가 무엇을 필요로하지만 MSSQL2005에서 "FOR XML"에 대한 기사를 찾았습니다. 23 sep. 082008-09-23 19:58:10

  0

나는 옳은 길로 나를 데려다 주셔서 감사합니다. 23 sep. 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>