Wie befüllen Sie Ihre Datenbank mit statischen, quellengesteuerten Daten mithilfe eines Visual Studio-Datenbankprojekts? Ich habe alle drei Strategien ausprobiert und festgestellt, dass jeder Schritt besser ist als der letzte. Ich benutze, aber nicht vollständig mit Strategie 3. Haben Sie eine andere Alternative?Bewährte Methode zum Auffüllen statischer Daten mit einem Visual Studio 2010-Datenbankprojekt?
Platzieren Sie Skripte in den Ordner "Data Generation Plans". Verweisen Sie die Skripts in der Datei "Script.PostDeployment.sql", um sie in den Bereitstellungsprozess einzubeziehen.
- Vorteil: straight-forward
- Nachteil: slooooooow
- Nachteil: nachfolgende entfalten muss zunächst statische Daten löschen oder für Nicht-Existenz von Daten prüfen => ineffizientLegen Sie die Daten in die Datenbank das erste Mal mit der Methode, die am bequemsten ist (z. B. die SSMS-Tabellenfunktion). Extrahieren Sie diese Daten mit dem bcp-Befehlszeilendienstprogramm, um eine Reihe von Datendateien zu erstellen und sie Ihrem Projekt hinzuzufügen. Erstellen Sie ein Skript, auf das in der Datei "Scripts.PostDeployment.sql" verwiesen wird, das für jede Datendatei eine Anweisung "Masseneinfügung" ausführt.
- Vorteil: viel schneller als Insert-Anweisungen
- Vorteil: kann SSMS nutzen bearbeiten Tabellenfunktion
- Nachteil: jede Anweisung von Bulk einen vollständig qualifizierten Dateinamen der Datendatei erfordert also, wenn die Datendateien befinden sich auf meinem Rechner unter "C: \ Projects \ Dev \ Source \ foo.dat", dann muss der Remote-Dev-Rechner sie auch an diesem Ort haben oder die Bulk-Insert-Anweisung schlägt fehl
- Nachteil: muss vorhandene statische Daten vor löschen Ausführen von Masseneinfügeanweisungen für nachfolgende BereitstellungenErstellen Sie während der Bereitstellung temporäre Tabellen, um die statischen Daten zu speichern Verwenden Sie die Anweisung sql merge, um diese Tabellen mit den Zieltabellen zu synchronisieren. Siehe either von these Blogposts.
- Vorteil: scheint, wie SQL-Merge hat die perfekte Semantik für das Problem
- Nachteil: die Logik für diese Strategie in jeder Datei wiederholt wird - Nachteil: Tabellendefinitionen als temporäre Tabellen in der SQL wiederholt Dateien zusammenführen
Gibt es eine überlegene alternative Strategie? Ich habe Strategie 1 aufgegeben, weil es zu langsam war. Ich mag Strategie 2 aufgrund des voll qualifizierten Dateinamens nicht. Ich bin zufrieden, aber nicht begeistert von Strategie 3. Gibt es eine Best Practice?
Haben Sie die Möglichkeit, die Daten in der Zieldatenbank zu verlassen, anstatt sie jedes Mal neu zu bevölkern? –
@David: Ich glaube nicht, dass es eine solche Option gibt, es sei denn jemand kann mir etwas anderes sagen. Es muss irgendwie Teil der skriptgesteuerten Lösung sein. Strategie 3 behandelt dies mit dem Zusammenführungsbefehl. Strategie 1 müsste geändert werden, um zuerst zu prüfen, ob die Daten vor dem Einfügen existieren. Das Gleiche gilt für Strategie 2. –
Es ist wahrscheinlich kein Trost für Sie, aber wir haben gerade SQL Source Control 2 veröffentlicht, das statische Daten unterstützt. Leider unterstützt dies das Datenbankprojekt nicht - Zumindest noch nicht. Wir denken jedoch ernsthaft darüber nach. Wenn Sie interessiert sind, stimmen Sie bitte hier ab: http://redgate.uservoice.com/forums/39019-sql-source-control/suggestions/1010465-work-with-a-visual-studio-2010-database- Projekt? Ref = Titel –