3 Stimmen

Wie erstellt man ein SQL Server-Tabellenschema anhand eines XML-Schemas? (mit .NET und Visual Studio 2008)

Ich habe ein XML-Schema, und ich weiß, dass "xsd.exe" den C#-Code für sie generieren kann. Aber ich möchte wissen, ob es möglich ist, automatisch die MS SQL Server 2005+ Tabellen aus der XSD zu erstellen, mit Hilfe dieses oder anderer Tools.

ÜBRIGENS: Ich habe nicht verstanden, wozu der von "xsd.exe" erzeugte C#-Code gut ist. Was ist der Unterschied zwischen dem von CodeXS und xsd.exe generierten Code?

4voto

Pratixa Punkte 64

Sie können das Dienstprogramm XSD2DB verwenden

Dies ist das Beispiel xsd2db.exe -f true -l [Servername] -n [Datenbankname] -s D:\po.xsd -t sql

Link für Hilfe http://xsd2db.sourceforge.net/

2voto

Brent Ozar Punkte 13049

Disclaimer: Ich habe das nicht selbst gemacht, aber ich habe diese Links vor einer Weile als Lesezeichen gespeichert, als ich darüber nachdachte, das zu tun. Das T-SQL dieses Mannes ist in der Regel brillant, also würde ich es sehr empfehlen:

http://weblogs.sqlteam.com/peterl/archive/2009/03/05/Extract-XML-structure-automatically.aspx

http://weblogs.sqlteam.com/peterl/archive/2009/06/04/Extract-XML-structure-automatically-part-2.aspx

2voto

Brian Genisio Punkte 47135

Übrigens habe ich nicht verstanden, was der C#-Code der von "xsd.exe" erzeugt wird, wert ist.

Ich nehme an, Sie meinen: "Ich verstehe nicht, wie der generierte Code nützlich ist".

Der Zweck des erzeugten Codes ist die Serialisierung unter Verwendung des Microsoft Serialisierungssubsystems in .NET. Wenn Sie einen neuen XmlSerializer(typeof(GeneratedType)) erstellen, können Sie anschließend Serialize() und Deserialze() aufrufen, um zu/von Xml und Objekten zu wechseln.

Mit einem komplizierteren Code-Generator wie CodeXS wird es sogar noch einfacher, da er Hilfsprogramme für Sie erstellt: GeneratedType.FromXML(Stream/String) zur Deserialisierung und myGeneratedType.Xml zur Serialisierung.

Mit diesen generierten Klassen können Sie auf der Grundlage eines veröffentlichten Schemas arbeiten und sich darauf verlassen, dass jede XML-Datei, die dem Schema entspricht, mit diesen Typen geparst und generiert wird. Sie müssen keine Arbeit leisten, um die Daten aus dem XML zu erhalten (d.h. kein XML-DOM-Zugriff), und Sie müssen nicht zweimal darüber nachdenken, ob Sie XML generieren wollen, das mit Ihrem Schema konform ist. Es funktioniert einfach :)

0voto

TheTXI Punkte 36691

Solange Sie Ihr XML-Schema erfolgreich analysieren können, sollten Sie in der Lage sein, die entsprechenden Datenbankskripte zu erstellen und auszuführen, um Ihre Tabellen zu erstellen.

0voto

StepUp Punkte 29996

Ich weiß, dass dies ein altes Thema ist, aber es war wirklich hilfreich für mich zu wissen, wie es gemacht werden kann. Vielleicht ist es auch für andere hilfreich.

Weitere fortgeschrittene Beispiele sind auf der Microsoft-Seite zu finden.

Es ist also möglich, manuell eine SQL-Tabelle aus einer XSD zu erstellen. Zum Beispiel haben wir die folgende Xml:

<?xml version="1.0" encoding="UTF-8"?>
<foo>
   <row>
      <CAR_NUM>624</CAR_NUM>
      <CAR_ORDER>1</CAR_ORDER>      
   </row>
   <row>
      <CAR_NUM>623</CAR_NUM>
      <CAR_ORDER>2</CAR_ORDER>      
   </row>
   <row>
      <CAR_NUM>681</CAR_NUM>
      <CAR_ORDER>3</CAR_ORDER>      
   </row>
   <row>
      <CAR_NUM>625</CAR_NUM>
      <CAR_ORDER>4</CAR_ORDER>      
   </row>
   <row>
      <CAR_NUM>680</CAR_NUM>
      <CAR_ORDER>5</CAR_ORDER>      
   </row>
</foo>

Unsere XSD wird also wie folgt aussehen:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
    <xsd:element name="row" sql:relation="CAR"   
                            sql:key-fields="CAR_NUM">  
        <xsd:complexType> 
            <xsd:sequence>
                <xsd:element name="CAR_NUM"   type="xsd:integer" />   
                <xsd:element name="CAR_ORDER"   type="xsd:integer" />  
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

Die SQL-Tabelle sieht dann wie folgt aus:

CREATE TABLE CAR (  
    CAR_NUM   INT ,  
    CAR_ORDER INT 
GO 

Und dann können Sie Interop.SQLXMLBULKLOADLib Bibliothek, um Daten in SQLServer zu laden:

try
{       
    var xmlFileName = @".your address here..\GetInformReplyEdited.xml";
    var xsdScheme = @".your address here..\scheme.xsd";

    var connString = "Provider=sqloledb;server=yourServer;database=Test;integrated security=SSPI";
    SQLXMLBULKLOADLib.SQLXMLBulkLoad4Class objBL = new SQLXMLBULKLOADLib.SQLXMLBulkLoad4Class
    {
        ConnectionString = connString,
        ErrorLogFile = "error.xml",
        KeepIdentity = false
    };
    objBL.Execute(xsdScheme, xmlFileName);
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X