SQL Server – komenda GO
GO jest komendą SQL Server, a nie poleceniem T-SQL. Informuje serwer o wysłaniu do jego instancji wszystkich poleceń T-SQL podanych przed GO jako jednego polecenia wsadowego( batch) .
GO wystepuje po jednym lub kilku poleceniach T-SQL. Po każdym poleceniu T-SQL stawiamy średnik, po komendzie GO nigdy. Poniższy przykład pokazuje zestaw poleceń zakończonych komendą GO.
create table person ( id int primary key, name varchar(100) not null ); insert into person(name) values('Muller'); insert into person(name) values('Davis'); select * from person; GO
Efekt:
Msg 515, Level 16, State 2, Line 1 Cannot insert the value NULL into column 'id', table 'BazaTest.dbo.person'; column does not allow nulls. INSERT fails. The statement has been terminated. Msg 515, Level 16, State 2, Line 2 Cannot insert the value NULL into column 'id', table 'BazaTest.dbo.person'; column does not allow nulls. INSERT fails. The statement has been terminated. (0 row(s) affected)
Ponieważ polecenia insert zawierały błąd, więc polecenie SELECT nie zostało uruchomione. Dopiero po wprowadzeniu w nich poprawek, polecenie SELECT zostanie uruchomione. Poniższy wsad przedstawia tą sytuację:
insert into person(id,name) values(1,'Muller'); insert into person(id,name) values(2,'Davis'); select * from person; GO
Polecenia T-SQL nie mogą być wpisywane w tej samej linii co komenda GO:
select * from person; GO
Wynik:
Msg 102, Level 15, State 1, Line 1 Incorrect syntax near 'GO'.
W linii z GO może być dodany tylko komentarz:
insert into person(id,name) values(5,'Burger'); select * from person; GO -- insert one person and select all records
Zmienne lokalne tworzone przez użytkownika nie mogą być tworzone i uruchamiane w osobnych wsadach, a więc oddzielnych zestawach z GO:
DECLARE @a int = 12; GO SELECT @a; GO
W wyniku otrzymamy błąd:
Msg 137, Level 15, State 2, Line 1 Must declare the scalar variable "@a".
Poprawiony wsad:
DECLARE @a int = 12; SELECT @a; GO
Kilka poleceń wpisanych przed GO jest kompilowane i uruchamiane jako jedno polecenie, wsad.
Istnieje jeszcze wersja GO z podaną po nim liczbą: GO [count]
Liczba ta musi być całkowita dodatnia. Polecenia podane przed GO tego typu (a więc zawarte w tym samym wsadzie ) będą uruchomione tyle razy na ile wskazuje podana liczba po GO. Oto przykład:
select top 2 * from person; GO 3
Komenda GO może być używana do wykonania jednocześnie wielu poleceń typu insert, a więc wstawienia wielu rekordów do tabeli jednocześnie, np. w celach testowych. Poniższy przykład pokazuje wstawienie do tabeli 10 wierszy, gdy tabela zawiera tylko jedno pole typu liczby całkowitej w postaci klucza głównego z autoinkrementacją. Jak wstawić dane do tabeli z takim jednym polem?
create table test_tab ( id int primary key identity, ); GO insert into test_tab DEFAULT VALUES; GO 10 select * from test_tab