rikkert Geschrieben 23. Mai 2011 Geschrieben 23. Mai 2011 Hi, ich möchte folgendes tun: Ich möchte von MSSQL Datenbanken die Datenbankstrukturen als xml Datei abspeichern, um die Struktur mit der selben DB auf einem anderen Server zu vergleichen, also ob die PKs, Spaltennamen und alles mögliche gleich sind, aber nicht den Inhalt der Tabellen, nur die Struktur. Außerdem sollen die Views gespeichert und verglichen werden. Das Problem ist schon das Speichern, ich weiß nicht wie ich die Struktur am besten als xml Datei speichere, kennt da jemand Möglichkeiten? Ich nutze vb.net Grüße Zitieren
Schmarrer Geschrieben 23. Mai 2011 Geschrieben 23. Mai 2011 Ich könnte dir ein fertiges OpenSource Projekt empfehlen, aber das ist wahrscheinlich nicht deine Intention oder? Zitieren
rikkert Geschrieben 23. Mai 2011 Autor Geschrieben 23. Mai 2011 Hmn, ne, ist ne Teilaufgabe von meinem Abschlussprojekt. Zitieren
flashpixx Geschrieben 23. Mai 2011 Geschrieben 23. Mai 2011 Naja Datenbank, darunter die Tabellen, darunter die Felder. Das wäre auf jeden Fall eine hierarchische Beziehung. Schlüssel, Attribute / Typen kann man dann ebenfalls als Attribute zu den Feldern speichern oder ggf das ganze gesondert mit einer Art Referenz innerhalb des Baums. Zwei identische Datenbanken würden identische Bäume aufbauen, d.h. der Vergleich auf Identität sollte nicht so schwierig sein Zitieren
Pfefferminzprinz Geschrieben 24. Mai 2011 Geschrieben 24. Mai 2011 hallo, na da hast du dir etwas vorgenommen Ein Tool welches das machen kann ist SQL Examiner. Das kannst du dir als Demo evtl. zu Rate ziehen. Schön ist dass dein Projekt auf MSSQL spezialisiert ist. Hier hast du die Systemtabellen welche dir Informationen über die Struktur der Datenbank geben. Aus dem Kopf SELECT * FROM sys.Tables . wenn du noch etwas googelst findest du noch mehr von den Tabellen, du benötigst noch weitere um dir die Felddatentypen mit den Namen mit rein zu joinen. Als Ergebnis hast du für eine Datenbank eine Liste mit allen Tabellen und deren Feldern mit Datentyp und Felddatentyplänge. Das könntest du nun als xml speichern. Bedenke dass du zwei/drei unterschiedliche Fälle zum angleichen hast: Feld hinzufügen, Feld ändern, Feld löschen. Du kommst sehr einfach auf die Änderungsskripte wenn du im Management Studio die Erstellung von Änderungsskripten aktivierst und mal bei einer Testtabelle ein Feld hinzufügst, änderst und löscht. Achtung bei nvarchar und sysname-Felddatentypen. Sysname ist ein Synonym für nvarchar und dein oben erwähntes SQL wird dir das Feld zwei mal anzeigen Hier einfach im WHERE-Teil WHERE Felddatentyp <> 'sysname' Um sichten zu vergleichen würde ich auf das information schema + view_definition gehen und die CREATE-Statements der Sicht extrahieren. Dabei aber beim vergleichen die Leerzeichen und die Umbrüche entfernen, Kommentare wirst du vermutlich nicht entfernen können, Vergleich ggf. mit Substring da man Text nicht vergleichen kann. Wenn es zwischen den beiden eine Differenz gibt hast du eine Änderung. @vorherige Poster Wie ihr auf einen Baum kommt würde mich mal interessieren :cool: Das einzige was Baumähnlich ist ist die Relation (mssql ralationales DB-System) zwischen Tabellenfeld und Felddatentyp. Wenn er das xml auch wieder relational Aufbauen möchte hm naja, ginge aber macht das Sinn? xml hätte den Vorteil man macht Doppelklick drauf und sieht was drinnen ist. Wenn das xml "verschlüsselt" ist weil ich mir um die Daten lesbar zu haben erst joinen müsste verliert es für mich an Charme. ungelöst ist das umbenennen eines Feldes. Hier hast du ausser Tabelle.Feldname meiner Meinung nach nichts anderes zum Vergleichen..... Zitieren
flashpixx Geschrieben 24. Mai 2011 Geschrieben 24. Mai 2011 Wie ihr auf einen Baum kommt würde mich mal interessieren :cool: Das einzige was Baumähnlich ist ist die Relation (mssql ralationales DB-System) zwischen Tabellenfeld und Felddatentyp. Datenbank => Tabelle => Feld => Typ ist eine hierarchische Beziehung, da XML eine Baumstruktur ist, kann man das genauso modellieren. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.