2009-08-25 3 views
0

J'ai un document XML raisonnablement complexe que je veux aplatir aux tables dans SQL Server 2005. Je ne veux pas avoir à coder manuellement chaque table et table de mappage. Les données sont stockées dans la zone de stockage d'un entrepôt de données, ce qui importe peu pour la structure des tables.Déchiqueter les données XML complexes dans de nombreuses tables en SQL?

Jusqu'à présent, je l'ai considéré, et rejeté ce qui suit ...

OpenXML - il semble que je peux lire le fichier XML en mémoire à l'aide de sql, mais ont alors d'écrire une charge de sql effectuer tous les inserts. Non merci.

Chargement en vrac XML - semble assez bon, mais j'ai l'impression que je suis censé écrire un XSD qui détaille toutes les relations. Je ne vois pas pourquoi je devrais le faire quand ils sont implicites dans la structure hiérarchique du xml.

SqlBulkCopy - il me semble que je dois encore écrire tous les trucs de cartographie. Ayant rejeté tout cela je pense à rouler le mien en C#, l'idée semble assez simple. Lisez les données dans un xmlReader, puis parcourez l'arborescence et générez les insertions. Je peux avoir une action séparée qui n'est exécutée qu'au moment du développement pour générer le schéma.

Des commentaires à ce sujet?

Répondre

0

Dans ce cas, la réponse finale est avéré être beaucoup plus simples ...

En passant par les détails de la exigences il s'avère que même si les données sont très structurées, les parties dont nous avons besoin peuvent être représentées par une seule table. Par conséquent je peux exécuter une transformation de xslt contre le xml pour me donner un ensemble de rangées et de colonnes qui vont directement dans une table. Via SSIS dans ce cas.

1

Utilisez le nouveau support XML dans SQL 2005. Il est de loin supérieur à OPENXML dans les versions antérieures. Vous n'avez pas besoin de trucs xsd.

À un certain point, vous avez besoin d'un mappage. XML peut être auto décrire, mais les tables de base de données ne sont pas ...

Example question (well my answer)

Questions connexes