Jakie jest zastosowanie GO w SQL Server Management Studio i Transact SQL?

363

SQL Server Management Studio zawsze wstawia polecenie GO podczas tworzenia zapytania za pomocą menu „Skrypt jako” prawym przyciskiem myszy. Dlaczego? Co właściwie robi GO?

tvanfosson
źródło
29
@ChrisF - to nie jest duplikat, chociaż zaakceptowana odpowiedź również odpowiada na to pytanie. To pytanie dotyczy użycia „GO” w transakcji - okazuje się, że tak naprawdę wcale nie jest to polecenie SQL. To pytanie jest o wiele bardziej ogólne i próbuje udzielić ostatecznej odpowiedzi na pytania dotyczące polecenia GO w SSMS.
tvanfosson,
3
Zobacz także ten link: Do czego służą zestawienia wsadowe?
Zain Rizvi,
Dokumentacja Microsoft: Instrukcje SQL Server Utilities - GO : Partia poprzedzająca GO wykona określoną liczbę razy.
min

Odpowiedzi:

304

Jest to terminator partii, możesz jednak zmienić go na cokolwiek chcesz alternatywny tekst

SQLMenace
źródło
80
gbn ustaw go na SELECT i zobacz, co się stanie :-)
SQLMenace,
14
Dzięki! Jaki jest jednak sens instrukcji GO? Może to zabrzmieć głupio, ale co oznacza „partia kodu”? msdn mówi, że po GO żywotność zmiennych wygasa. Nie ma to nic wspólnego ze zobowiązaniami transakcyjnymi, prawda? Czy są jakieś okoliczności, w których powinienem przechowywać instrukcję GO w moich skryptach?
kate1138
4
Oznacza to, że wszystkie T-SQL przed nim wykonają się „jednocześnie”. Z tego, co rozumiem, można go zamieniać średnikiem (OLEDB / Oracle). Na przykład, jeśli masz duży skrypt po wdrożeniu, instrukcja GO między wierszami może pomóc w pamięci używanej w skrypcie.
Anthony Mason,
4
Ta odpowiedź tak naprawdę nie wyjaśnia „co to właściwie robi” ani dlaczego
Andrew
Po przeczytaniu odpowiedzi @tvanfosson: czy to naprawdę jest wymienne z średnikiem?
WoIIe
298

Od Management Studio 2005 wydaje się, że można używać GOz intparametrem, takim jak:

INSERT INTO mytable DEFAULT VALUES
GO 10

Powyższe wstawi 10 wierszy do mytable. Ogólnie rzecz biorąc, GOwykona pokrewne polecenia sql nrazy .

MicSim
źródło
199

Polecenie GO nie jest instrukcją języka Transact-SQL, ale specjalnym poleceniem rozpoznawanym przez kilka narzędzi MS, w tym edytor kodu SQL Server Management Studio.

Polecenie GO służy do grupowania poleceń SQL w partie, które są wysyłane razem do serwera. Polecenia zawarte w partii, to znaczy zbiór poleceń od ostatniego polecenia GO lub rozpoczęcia sesji, muszą być logicznie spójne. Na przykład nie można zdefiniować zmiennej w jednej partii, a następnie użyć jej w innej, ponieważ zakres zmiennej jest ograniczony do partii, w której została zdefiniowana.

Aby uzyskać więcej informacji, zobacz http://msdn.microsoft.com/en-us/library/ms188037.aspx .

tvanfosson
źródło
37
W jakiej sytuacji grupowanie rzeczy jest GOnaprawdę przydatne?
nicodemus13
3
@ nicodemus13 Zobacz stackoverflow.com/questions/20711326/…
Zain Rizvi,
4
więc jeśli jedno zdanie w partii nie powiedzie się, czy wszystkie zawiodą?
MonsterMMORPG
36

GO nie jest słowem kluczowym SQL.

Jest to separator partii używany przez narzędzia klienckie (takie jak SSMS) do dzielenia całego skryptu na partie

Kilkakrotnie odpowiedziałem wcześniej ... przykład 1

gbn
źródło
4
W mojej obronie przejrzałem sugerowane duplikaty przed przesłaniem pytania - i twój przykład się nie pokazał, ani tak naprawdę nie jest duplikatem, chociaż odpowiedź ma zastosowanie.
tvanfosson,
26
Trudno tu znaleźć „GO” :-)
gbn
20

Aby dodać do istniejących odpowiedzi, podczas tworzenia widoków należy rozdzielić te polecenia na partie go, w przeciwnym razie wystąpi błąd 'CREATE VIEW' must be the only statement in the batch. Na przykład nie będzie można wykonać następującego skryptu SQL bezgo

create view MyView1 as
select Id,Name from table1
go
create view MyView2 as
select Id,Name from table1
go

select * from MyView1
select * from MyView2
Mychajło Seniutowicz
źródło
Utwórz także procedury
Luciano Santos,
2
To jedyna odpowiedź, która naprawdę odpowiada na pierwszą część pytania OP: „... zawsze wstawia polecenie GO… Dlaczego?”. Wydaje się, że przez większość czasu ze strachu. Wymagany jest jedynie czas, kiedy polecenie musi znajdować się we własnej partii.
bielawski
7

Go oznacza, że ​​wszelkie instrukcje SQL zapisane przed nim i po każdym wcześniejszym GO, przejdą na serwer SQL w celu przetworzenia.

Select * from employees;
GO    -- GO 1

update employees set empID=21 where empCode=123;
GO    -- GO 2

W powyższym przykładzie instrukcje przed GO 1 przejdą do SQL Server w partii, a następnie wszelkie inne instrukcje przed GO 2 przejdą na serwer SQL w innej partii. Tak więc, jak widzimy, ma oddzielone partie.

ANIL KUMAR
źródło
5
Use herDatabase
GO ; 

Kod mówi, aby wykonać instrukcje powyżej GOznacznika. Moja domyślna baza danych to myDatabase, więc zamiast używać myDatabase GOi wykonuje bieżące zapytanie, aby użyć herDatabase

TonyP
źródło
-8

Oto magia GO.

SELECT 'Go'
Go 10

SKŁADNIA: Idź INT(BatchNumber)

BatchNumber: Liczba przypadków nie wystąpiła

Wygląda prosto, może prowadzić do Spaghetti, jeśli kodujesz głębiej.

Ragul
źródło
próbuje to wyjaśnić instrukcję GOTO używaną w programowaniu (tak myślę), jak skrypty wsadowe .. nie ma to nic wspólnego z instrukcją GO w SQL Server. GO zwykle nie jest używane z INT, chociaż możesz, jeśli chcesz przetworzyć partię N ilość razy .. więc nie, to nie jest „magia” GO. Służy do rozdzielenia skryptu na serię zgrupowanych wykonań, jak wyjaśniono w innych odpowiedziach.
Heriberto Lugo,