2009-08-25 1 views
0

Ich habe ein ziemlich komplexes XML-Dokument, das ich auf Tabellen in SQL Server 2005 abflachen möchte. Ich möchte nicht jede Feld- und Tabellenzuordnung manuell codieren müssen. Da die Daten in den Staging-Bereich eines Data Warehouse gehen, ist es nicht so wichtig, wie die Tabellen strukturiert sind.Shred komplexe XML-Daten in viele Tabellen in SQL?

Bisher habe ich in Betracht gezogen haben, und wies die folgende ...

OpenXML - es scheint, dass ich die xml in den Speicher in SQL lesen kann diese verwenden, aber dann eine Last von SQL schreiben müssen, um führe alle Einsätze durch. Nein Danke.

XML Bulk Load - sieht ziemlich gut aus, aber ich habe den Eindruck, dass ich eine XSD schreiben soll, die alle Beziehungen beschreibt. Ich verstehe nicht, warum ich sollte, wenn sie in der hierarchischen Struktur des XML enthalten sind.

SqlBulkCopy - sieht so aus, als müsste ich noch alle Mapping-Sachen schreiben.

Nachdem ich all diese Dinge abgelehnt habe, denke ich darüber nach, meine eigene in C# zu rollen, die Idee scheint ziemlich einfach zu sein. Lesen Sie die Daten in einen xmlReader, führen Sie den Baum durch und generieren Sie die Einfügungen. Ich kann eine separate Aktion ausführen, die nur zur Entwicklungszeit ausgeführt wird, um das Schema zu generieren.

Irgendwelche Gedanken dazu?

Antwort

0

In diesem Fall ist die endgültige Antwort erwies sich als viel einfacher ...

von durch die Details der gehen Anforderungen stellt sich heraus, dass selbst wenn die Daten stark strukturiert sind, die Teile, die wir brauchen, durch eine einzige Tabelle dargestellt werden können. Daher kann ich eine xslt-Transformation gegen die XML ausführen, um mir eine Reihe von Zeilen und Spalten zu geben, die direkt in eine Tabelle gehen. In diesem Fall über SSIS.

1

Verwenden Sie neue XML-Unterstützung in SQL 2005. Es ist weit besser als OPENXML in früheren Versionen. Du brauchst kein xsd-Zeug.

Irgendwann brauchen Sie ein Mapping. XML kann selbst beschreiben, aber Datenbanktabellen sind nicht ...

Example question (well my answer)