MSSQLまたはAccessから適切なXMLファイルへのテーブルのエクスポートを自動化するにはどうすればよいですか?


1

私たちは顧客にXML形式のデータを要求しています。通常は、AccessデータベースやCSVファイルを渡すだけで十分です。しかし、この場合、十数個のテーブルから適切なXMLのエクスポートを自動化する必要があります。

もし私がSQL Server 2005からそれを行うことができればそれが望ましいでしょう。しかし私は私の人生のためにこれを行う方法を見つけることはできません。私は生のXMLデータをダンプすることができますが、これは属性値を持つ行ごとのタグに過ぎません。テーブルの構造を表すものが必要です。アクセスには、私たちのニーズを満たす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 9月. 082008-09-23 19:58:10

  0

私は正しいことに私を得ることに感謝します... 23 9月. 082008-09-23 20:37:10


1

フラグメントの代わりにドキュメントが必要な場合は、おそらく2つの部分からなるソリューションが必要です。ただし、両方の部分をSQL Serverで実行できます。

あなたはELEMENTS引数を見つけたように、Tomのエントリのコメントから見て、フィールドを属性ではなく子要素として取得しています。ただし、ルートノードを取得しないため、フラグメントになります。

これを処理する方法はいくつかあります。 SQL Server provides a method XSLTを使用してXMLドキュメントを変換するため、クエリの結果をルート要素にラップするXSLスタイルシートを作成できます。顧客のスキーマに必要なものを追加することもできます(それがあると仮定して)。あなたは属性としていくつかのフィールドを残して、他の要素を作りたい場合

、あなたはこのようなもので終わるかもしれないので、あなたはまた、これらのフィールドを移動するためにXSLTを使用することができます。

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