Was ich gerade bei Jon Galloway im Artikel "Using 'GO 100' to execute a batch 100 times" las, habe ich nicht gewusst. Microsoft hat in die Werkzeuge des SQL-Servers-2005 ein nettes und undokumentiertes Feature eingebaut: Ein Batch wird in einer Schleife mehrfach wiederholt. Echt cool!
Mal ein Beispiel:
print 'Hello'
go 10
liefert als Ergebnis im Message-Window des Management-Studio:
Beginning execution loop
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Batch execution completed 10 times.
Das geht genauso im sqlcmd (allerdings ohne "Beginning execution loop" und "Batch execution completed x times.") und im mitgelieferten osql (mit "x xacts:" am Ende).
Das "go" ist ein reiner Steuerungsbefehl für die Werkzeuge und dient dazu zwei Batches hintereinander an den SQL-Server zu schicken. Das wurde jetzt aufgebohrt.
Tatsächlich gibt es dazu einige nützliche Anwendungen:
- Wenn man mal eben schnell ein paar hundert Datensätze einfügen will und keinen Bock auf eine Schleife hat.
- Protokollieren von dynamischen System-Eigenschaften, wie die Wait Events oder Informationen über Blockierungen
- Wenn man den SQL-Server unter Last setzen will, um das Verhalten des Systems zu beobachten.
Risiken und Nebenwirkungen: Weil es undokumentiert ist, haftet Microsoft für nix und behält sich vor, das tolle Feature jederzeit wieder einklappen zu können. Das fände ich allerdings ziemlich schade…