Frage

Es ist möglich, mehrere Befehle oder SQL-Skript mithilfe von OLE DB laufen? Zum Beispiel SQL-Skript ausführen Datenbank zu erstellen und ihre Struktur (Tabellen, Indizes, gespeicherte Prozeduren ...).

Wenn ich CCommand Klasse verwenden, kann ich nur einen Befehl ausführen. Wie kann ich ausführen SQL-Skript mit mehreren Befehlen?

Danke, Martin

War es hilfreich?

Lösung

Martin - Ich habe das gleiche Problem hat. Ich gehe davon aus, dass, wenn Sie ein Skript mit einem Laden oder mehr „go“ in ihm eine Fehlermeldung angezeigt?

Ich habe SQL DMO in der Vergangenheit verwendeten Skripte mit GO in ihnen zu laufen. Das macht erforderlich, dass SQLDMO auf dem Zielcomputer installiert werden.

Eine weitere Option ist die .NET "String.Split (" GO ")" Funktion und Schleife die resultierende Array von Strings zu verwenden, sie eins nach dem anderen exexuting.

Wie folgt aus:

StreamReader file = File.OpenText("c:\\MyScript.sql");
SqlConnection conn = new SqlConnection("My connection string here...");
string fullCommand = file.ReadToEnd();
string[] splitOptions = new string[] {"go", "GO", "gO", "Go" };
foreach (string individualCommand in fullCommand.Split(splitOptions, StringSplitOptions.RemoveEmptyEntries))
{
    SqlCommand comm = new SqlCommand(individualCommand, conn);
    comm.ExecuteNonQuery();
}

Disclaimer: Ich habe den obigen Code nicht getestet, aber es sollte Ihnen eine Vorstellung davon, was erforderlich ist: -)

Andere Tipps

Der GO-Befehl, die TSQL-Anweisungen trennt, ist nicht ein SQL-Befehl, sondern eine durch das vordere Ende erkannte Aussage nur.

Daher müssen Sie explizit das Skript in mehrere Befehle aufgeteilt in „\ nGO“, bevor das Ergebnis an den Befehl Objekt übergeben.

Ich habe mehrere Anweisungen wie INSERT INTO gesendet;. INSERT INTO (Semikolons sind nicht in SQL Server erforderlich

Einige Aussagen (wie CREATE FUNCTION) hat die erste Anweisung in einem „Batch“ sein. In SSMS und sqlcmd, haben Sie einen GO-Separator, der ein clientseitiges Werkzeug zur Trennung von Chargen ist. Dies ist nicht eine OLEDB-Funktion, so dass Sie sie müßten separat schicken -. In einem separaten Aufruf in Reihe oder parallel (abhängig davon, ob Operationen gleichzeitig ausführen können)

Wenn Sie von CCommand wegkommen kann, ich denke, Sie sqlcmd starten konnte, da es GO Batch-Separatoren unterstützt.

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