Ich bin auf der Suche nach einer Hochverfügbarkeitsarchitektur, wobei zwei Spiegel-Datenbanken existieren (DB1 & DB2), die eine andere Datenbank mit Sichten (DBV) dienen. DB1 hat das Overnight-ETL, während DBV auf DB2 schaut, bis das ETL auf DB1 abgeschlossen ist, zu welchem Zeitpunkt seine Ansichten zu den zugrundeliegenden Tabellen auf DB1 wechseln. Sobald der ETL auf DB1 abgeschlossen ist, wird DB2 mit DB1-Daten vor dem ETL des nächsten Tages wiederhergestellt. Am nächsten Tag wechseln DB1 und DB2 die Rollen.Bessere Art der dynamischen Auswahl einer anderen Datenbank als sp_executesql
Ich bin auf der Suche nach einer besseren/sichereren Möglichkeit, zwischen den beiden Ansichten zu wechseln, als sp_executesql auszuführen, um eine dynamisch erstellte Zeichenfolge auszuführen. Ich werde auch nach gespeicherten Prozeduren aus einer Staging-Datenbank suchen, bei denen die Skripts dynamisch geändert werden müssen, damit die richtige Datenbank für die Ausführung der ETL verwendet werden kann. Im Wesentlichen möchte ich die USE-Anweisung dynamisch übergeben und dann den Rest des Skripts außerhalb einer dynamischen Anweisung ausführen.
Ich möchte sp_executesql aus Support-Gründen für andere Entwickler vermeiden und auch um eine mögliche umfangreiche Verkettung von Strings umgehen, wenn die gespeicherte Prozedur/Ansicht besonders lang wird.
Irgendwelche Ideen/unterschiedliche Ansätze zur Hochverfügbarkeit in diesem Zusammenhang wären zu begrüßen.
Denken Sie über die Verwendung von SSIS nach? Dort können Sie alle Arten von dynamischen Anweisungen definieren und diese über "SQL-Task ausführen" ausführen (und debuggen/verfolgen/...). – Tyron78
Es ist eine meiner ausfallsicheren Optionen, aber wenn ich das via Sprocs überhaupt umgehen kann, wäre es großartig. Ich dachte etwas in der Art einer If-Anweisung, die sich auf eine Nachschlagetabelle bezieht, was: setvar-Datenbank "db_name" sein könnte und führe das dann als meine USE-Anweisung aus. Ich bin mir nicht sicher, ob ich bekommen kann: setvar, um auf diese Weise auf meine Nachschlagetabelle zu verweisen. – TJB
Warum verwenden Sie überhaupt "USE"? Sollte es möglich sein, alle Objekte mit einem voll qualifizierten Namen zu erstellen (CREATE DB1.MySchema.MyView ...) – Tyron78