Frage

Wir haben ein SQL -Skript in einer .sql -Datei. Es hat ein paar Parameter wie diese definiert

DECLARE @device_directory NVARCHAR(250) = '$(CONFIG_DBPATH)'+'$(CONFIG_DBNAME)'

Anschließend führen wir dieses Skript in einem .bat -Skript aus:

SET CONFIG_DBNAME=NewConfigBase
SET CONFIG_DBPATH=C:\BT_Server\
sqlcmd -I -S .\SQLEXPRESS8  -i SetUpConfigDb.sql

Mir wurde die Aufgabe zur Implementierung dieser Funktionalität als Teil unseres Konfigurationstools zugewiesen, dh Erstellen der physischen DB -Datei und das Anhängen an der Datenbank. Später werden wir auch die Erstellung von Datenbanktabellen, gespeicherten Prozeduren, ECT, enthalten, die derzeit in einem separaten .sql -Skript definiert sind.

Im Idealfall möchte ich, dass das Konfigurationstool nicht auf SQLCMD stützt, sondern die Skripte in Process (z. B. durch Verwendung von SQLCommand) ausführt. Dies würde es mir ermöglichen, die Standardfehlerbehandlung (Ausnahmen) zu verwenden, anstatt die Ausgabe von SQLCMD zu analysieren.

Jetzt bin ich mir ein bisschen nicht sicher, wie ich das angehen soll. Ich möchte in der Lage sein, unsere vorhandenen SQL-Skripte wiederzuverwenden, damit wir unsere .bat-Skripte weiterhin verwenden können, ohne zwei verschiedene SQL-Abfragen beizubehalten, die dieselbe Aufgabe ausführen.

Eines der Skripte enthält an mehreren Stellen. Nach meinem Verständnis erlaubt SQLCommand dies nicht. Ich bin mir auch nicht sicher, ob ich SQLParameter verwenden kann, um den Wert von $ (config_dbPath) usw. festzulegen (in der Tat bin ich fast sicher, dass ich es nicht kann).

Meine Frage ist also, was ist die empfohlene Möglichkeit, dieses Szenario anzugehen? Wie führe ich .SQL -Befehle mit GO in ihnen aus und wie lasse ich Variablen an, damit die Skripte sowohl aus .bat -Dateien als auch aus verwaltetem Code verwendet werden können? Ich nehme an, eine Option besteht darin, das Skript zu waschen, wenn es aus dem Code ausgeführt wird, um Go usw. zu entfernen, und wie Variablen behandelt werden. Aber gibt es bessere Optionen?

War es hilfreich?

Lösung

Wenn Sie SQL -Skripte über SQLCommand programmatisch ausführen möchten, müssen Sie die Datei öffnen und die Zeile nach Zeile lesen. Wenn Sie jede Zeile übergeben, fügen Sie sie an den aktuellen Batch -String -Builder hinzu. Wenn Sie auf eine Zeile klicken, die nach dem Trimmen Go ist, erhalten Sie String Builder zum Tostring und führen Sie diese Stapel aus. Löschen Sie die aktuelle Charge und machen Sie weiter.

Bearbeiten: Der zweite Teil der Frage, soweit die Parameter gehen, können Sie sie entweder als Teil des Parsens und Ausführens ersetzen oder Aufgaben wie das Erstellen des DBS in C# Code erziehen. Als Präferenz habe ich die SQL -Skripte immer von SSMS und SQLCMD von Entwicklern ausgeführt, obwohl sie zufällig im Rahmen der Bereitstellung von C# Code ausgeführt werden. Das heißt also, ich würde keine speziellen Token erfinden, die nur Ihr Code versteht. Sie könnten wie in Ihrer Frage gehen, sie ersetzen und darüber hinaus im Skript die Variablen deklarieren und kommentiert werden - so dass Entwickler leicht in SSMs arbeiten können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top