Dana jest tabela:
CREATE TABLE uniq
(
uix uniqueidentifier NOT NULL
);
Zadanie polega na dodaniu do tabeli 300 wierszy z dowolnymi wartościami
uix, stosując jak najkrótszy skrypt. Oczywiście rozwiązań jest kilka, ale pokażę pewną mało popularną funkcjonalność, tzw. batch execution loop. Wiąże się ona ze składnią polecenia GO.
Koniecznie trzeba podkreślić, że GO nie jest poleceniem języka T-SQL. Komenda ta sygnalizuje koniec batcha, czyli zbioru wyrażeń T-SQL jednocześnie przesłanych do serwera i przetwarzany przez niego jako łączny zestaw operacji. Batch jest całościowo parsowany, bindowany, algebryzowany i optymalizowany (przy czym algebryzacja i optymalizacja logicznie dotyczą poszczególnych wyrażeń). GO rozumiane jest wyłącznie przez natywne narzędzia platformy SQL Server (m.in. Query Analyzer, Management Studio). Zważywszy jednak na fakt, że większość czynności administracyjnych (testowych itd.) wykonywana właśnie z takich klientów, warto opisaną niżej metodę mieć w pamięci - mimo, że nie jest ona oficjalnie udokumentowana.
Jeżeli po GO napiszemy liczbę całkowitą, cały batch ograniczony przez to polecenie zostanie powtórzony dokładnie tyle razy, na ile wskazuje podana przez nas liczba. Zadanie można więc rozwiązać następująco:
INSERT INTO uniq SELECT NEWID()
GO 300
Powyższy skrypt zwróci następujący komunikat:
Beginning execution loop
(1 row(s) affected)
(1 row(s) affected)
...
(1 row(s) affected)
Batch execution completed 300 times.
Funkcjonalność została wprowadzona do narzędzi SQL Server 2005 (Management Studio, SQLCMD). Narzędzie te pozwalają na zmianę domyślnego separatora batcha (GO) na ciąg znaków wybrany przez użytkownika - nie jest to jednak zalecane.