8 Stimmen

Versionsänderungen für Stored Procedures

Ich habe eine Anwendung, die sich sehr stark auf gespeicherte Prozeduren (SQL 2005/2008) stützt. Wir führen gerade ein kleines Update durch, bei dem 25-35 dieser gespeicherten Prozeduren geändert werden sollen. Die Anwendung ist so konzipiert, dass beide Versionen der gespeicherten Prozeduren verfügbar sein müssen.

Dies ist die Hauptversion 4 der Anwendung, und normalerweise konnten wir die Datenstruktur mit jeder neuen Version vollständig ändern. In diesem Fall können wir das jedoch nicht tun.

Hier sind meine 2 Optionen, die ich mir ausgedacht habe

  1. Erstellen Sie von jeder gespeicherten Prozedur eine "2"-Version. Wenn ich eine Prozedur namens getUser habe, erstelle ich eine getUser2. Der Nachteil dabei ist, dass die Anzahl der gespeicherten Prozeduren mit jeder Versionsänderung exponentiell ansteigt

  2. Fügen Sie einen @version-Parameter zu jeder gespeicherten Prozedur hinzu, der standardmäßig v1 lautet. Dies würde die Anzahl der gespeicherten Prozeduren verringern, aber jede gespeicherte Prozedur aufblähen

Hat jemand eine Meinung dazu? Irgendwelche anderen cleveren Ideen?

Cody

0voto

Jeff Punkte 2805

In meinem Unternehmen haben wir früher ausgiebig gespeicherte Prozeduren verwendet, sind aber in letzter Zeit (größtenteils) davon abgekommen und zu ORM übergegangen.

Wir verwenden sie nach wie vor, und unsere Versionsverwaltung ist dieselbe wie früher: Jedes Mal, wenn wir die verbleibenden gespeicherten Prozeduren ändern (wozu nur einige wenige Personen berechtigt sind), speichern wir das SQL ab und legen die .sql-Datei in unserer Versionskontrolle ab.

Es ist unvollkommen und wir verlieren einen Großteil der Integration zwischen der Versionskontrolle und unseren Codedateien (da es keine SQL-Server-Integration in TFS gibt), aber es ist besser als gar keine Versionskontrolle.

EDIT - und das funktioniert natürlich nur, wenn Sie die alte Version des gespeicherten Prozesses nicht mehr benötigen, da sie nicht mehr in einer lauffähigen Form existiert.

0voto

thomas Punkte 2519

Ein anderer interessanter Ansatz wäre es, den gesamten Code für Ihre gespeicherten Prozeduren in einer Datenbanktabelle zu speichern, zusammen mit der Version des Codes. Dann haben Sie eine "Front-End"-Prozedur, die Anfragen bearbeitet und dann, je nach Version, dynamisch eine Prozedur erstellt und ausführt. Nach Beendigung der Prozedur kann diese wieder gelöscht werden.

Das ist nur ein unkonventioneller Vorschlag, aber vielleicht klappt es ja bei Ihnen.

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