2011-01-02 12 views
2

Ich habe eine C# -Anwendung, die Tabellen in einer SQL Server 2008-Datenbank verwendet (auf einem eigenständigen PC mit lokalen SQL Server ausgeführt wird).Wie Tabellenstrukturen aktualisieren aktuelle Daten beibehalten

Zunächst installiere ich Datenbank auf diesem PC mit einigen anfänglichen Daten (es gibt einige Tabellen, die Anwendung verwendet und der Benutzer nicht berührt). Die Frage ist - wie kann ich diese Datenbank aktualisieren, nachdem der Benutzer einige neue Daten erstellt hat, ohne sie zu beschädigen (ich entwickle weiter auf einem anderen PC und kann einige neue Tabellen oder gespeicherte Prozeduren hinzufügen oder Spalten zu vorhandenen Tabellen hinzufügen).

Ich meine, dass, wenn ich neue Version veröffentliche ich neue Version der Datenbank auf Backup-Datei (oder etwas anderes?), Die neue Struktur und diese ersten Tabellen enthält und ich muss bestehende Datenbank aktualisieren, ohne aktuelle Daten zu verlieren.

Vielen Dank im Voraus!

Antwort

1

Das Hinzufügen neuer Tabellen sollte keine negativen Auswirkungen auf vorhandene Tabellen haben. Wenn Sie jedoch Spalten hinzufügen, sollten Sie darauf achten, dass die Werte für diese Spalten für vorhandene Zeilen gefüllt werden (insbesondere, wenn die Spalten eine Nicht-Null-Einschränkung für sie haben - in diesem Fall müssen Sie die DEFAULT-Klausel verwenden). Dies erreichen Sie mit der DEFAULT-Klausel und durch Ausführen einer speziellen SQL-Abfrage nach dem Erstellen der Spalte, um den Wert der neuen Spalte in vorhandenen Zeilen festzulegen.

+0

THanks, habe ich diese und auf meinem PC, wo ich die Anwendung entwickeln, ändern i Tabellen Strukturen ohne Probleme. Das Problem besteht darin, alle Datenbankänderungen auf den Computer des Benutzers zu übertragen, ohne lokale Daten zu beeinträchtigen. – Leon

+0

@Leon Ändern der Datenbank bedeutet einige Abfragen wie CREATE TABLE, ALTER TABLE usw., richtig? So können Sie diese Abfragen auf dem PC des Benutzers ausführen und die Richtlinien verwenden, die ich Ihnen gab. –

+0

Ja, natürlich. Ich brauche genau eine Vorlage oder eine Idee, um (automatisch?) Diese CREATE- und/oder ALTER TABLE-Abfragen für alle Elemente in der Datenbank (auch Funktionen und gespeicherte Prozeduren und Ansichten) zu erstellen, um eine Befehls/Batch-Datei (?) Für das Upgrade zu erstellen . Ich weiß nicht, tsql gut ... – Leon

0

Sie können auch Fremdschlüssel verwenden, um Zeilen aus einer Tabelle mit den Zeilen einer anderen Tabelle zu verknüpfen. Dadurch können Ihre Tabellen kleiner und Ihre Daten segregierter werden.

+0

Ich habe ausländische Schlüssel, wo benötigt, verstehe ich nicht, wie es betrifft, Datenbankstruktur zu kopieren? – Leon

+0

@Leon Die Verwendung von Fremdschlüsseln und kleineren Tabellen minimiert die Notwendigkeit, neue Spalten zu vorhandenen Tabellen hinzuzufügen. –

+0

ich stimme zu :) nur die Entwicklung ist noch nicht fertig, aber wir haben bereits ATP-Prozess auf dem Standalone-PC gestartet. – Leon

4

Sie müssen Ihre vorhandene Datenbankstruktur mithilfe von Änderungsskripten mit Befehlen wie ALTER TABLE usw. aktualisieren.

Es gibt grundsätzlich zwei Möglichkeiten, dies zu tun:

  • können Sie ein "diff" basiertes Tool wie Red-Gate SQL Compare verwenden, um die Unterschiede zwischen Ihrer Datenbankversion x und Version (x + 1) zu bestimmen. Dieses Tool erstellt ein Änderungsskript für Sie, das Sie dann auf dem Zielcomputer ausführen können, um Ihre Datenbank auf die neue Struktur zu bringen. Sie können diese Änderungsskripts auch manuell schreiben und zusammenstellen und auf der .exe ausführen Zielmaschine

So oder so: Sie müssen den Überblick über Ihre Datenbankversionen zu halten, und Sie müssen extreme Vorsicht verwenden keinen Datenverlust mit allen Skripts zu verursachen (wie eine Tabelle oder etwas fallen)

0

Wirklich hasse es, dies ohne die Besonderheiten zu tun, aber ...

Allgemein gilt:

  1. aktuelle Tabelle temporäre Tabelle
  2. Tabelle
  3. Wählen Sie aus temporärer Tabelle mit neuer Konfiguration in neuer Tabelle
  4. Wenn alles geklappt hat, löschen temporäre Tabelle erstellen Umbenennen

All dies kann in einem Skript durchgeführt werden. Ich habe es gesehen.

Alternativ könnten Sie dies in Betracht ziehen: SQL Server Management Studio - how to change a field type without dropping table

Verwandte Themen