SQL Server: T-SQL - GO
15.09.2009 16:34
Batch-Seperator GO bei der Ausführung
Kein größeres T-SQL-Skript kommt ohne eine GO-Anweisung aus. Bei der Ausführung über eine der Execute-Methoden des System.SqlCliebt.SqlCommand-Objekts kommt es dabei zu einem Fehler. Dies liegt daran, das GO keine T-SQL-Anweisung ist, sondern lediglich zum Trennen mehrerer Anweisungen dient. Dies ist schon daran erkennbar, dass theoretisch statt GO auch eine andere Zeichenfolge diese Aufgabe wahrnehmen kann (Microsoft SQL Server Management Studio/Extras/Optionen/Abfrageausführung). Für das Problem bieten sich zwei Lösungen an. Entweder lesen Sie das T-SQL-Skript zeilenweise ein und lassen den Text zwischen den GOs ausführen, wobei diese selbst unter den Tisch fallen. Da der Batch-Seperator immer als erstes in der Zeile stehen muss, ist dies kein besonders schwieriges Unterfangen. Die andere Lösung besteht darin, das Sie die Server Management Objects (SMO) für die Ausführung verwenden. Dieses Objektmodel wird vom Management Studio selbst für die Ausführung von Anweisungen verwendet. Daher wird auch automatisch die richtige, weil konfigurierte Trennzeichenfolge verwendet. Im Groben kann dies so aussehen:
Dim sr As StreamReader = New StreamReader("C:\MeinSkript.sql")
Dim script As String = sr.ReadToEnd
Dim SMOServer As Server = New Server
Dim db As Database = SMOServer.Databases("MeineDB")
db.ExecuteNonQuery(script) Beachten Sie, dass die SMO auf den wenigsten Client-Computern ohne Management Studio verfügbar sind. (Thorsten Kansy/am)
