Ich weiß, dass dies ein bisschen seltsam ist, aber wenn jemand helfen könnte, wäre ich sehr dankbar.
Das Szenario ist, dass wir eine Produktionsdatenbank an einem entfernten Standort und eine Entwicklerdatenbank in unserem lokalen Büro haben. Die Entwickler nehmen Änderungen direkt an der Entwicklerdatenbank vor, und als Teil des Bereitstellungsprozesses wird eine C#-Anwendung ausgeführt, die eine Reihe von .sql-Skripten erzeugt, die wir auf der entfernten Seite ausführen können (im Wesentlichen delete *, insert), aber wir suchen nach etwas Aufwändigerem, da die Ausfallzeit durch das delete * inakzeptabel ist. Dies sind alles Referenzdaten, die Menüpunkte, Funktionen usw. einer großen Website steuern.
Ich habe eine Sproc, die im Wesentlichen eine Diff von zwei Tabellen zurückgibt. Mein Denken ist, dass ich alle erwarteten Daten in eine tmp-Tabelle einfügen kann, führen Sie die diff, und löschen Sie alles aus der Zieltabelle, die nicht in der Quelle und dann Upsert alles andere ist.
Die Frage ist, ob es eine einfache Möglichkeit gibt, dies zu tun, ohne einen Cursor zu verwenden? Zur Veranschaulichung gibt die Sproc einen Datensatz zurück, der wie folgt strukturiert ist:
Tabellenname Col1 Col2 Col3 Ziel Src
Alles im Recordset mit TableName = Dest sollte gelöscht werden (da es in src nicht existiert) und alles in Src sollte in dest eingefügt werden. Mir fällt kein Weg ein, dies rein setbasiert zu tun, aber meine DB-Kenntnisse sind schwach.
Für jede Hilfe wären wir dankbar. Bitte entschuldigen Sie, wenn die Erklärung unvollständig ist; lassen Sie es mich wissen, wenn Sie weitere Details benötigen.
0 Stimmen
Klingt wie ein Kandidat für die Verwendung von Sql-Server-Replikation?
0 Stimmen
Ich habe erst gestern eine ähnliche (aber nicht identische) Frage gestellt. Ich habe mich entschieden, Visual Studio 2010 Data Compare zu verwenden. stackoverflow.com/questions/3012544/
0 Stimmen
Ich habe keine Möglichkeit des Datenabgleichs und wir arbeiten auch noch mit SQL Server 2005 (also kein T-SQL MERGE). Eine Replikation würde auch nichts bringen, da wir nur in regelmäßigen Abständen deployen (manchmal einmal pro Woche, manchmal einmal im Monat) und die Produktionsdaten außerhalb dieser Zeiten unangetastet bleiben sollten.