Was ist die Verwendung von GO in SQL Server Management Studio und Transact SQL?


363

SQL Server Management Studio fügt immer einen GO-Befehl ein, wenn ich eine Abfrage über das Kontextmenü "Skript als" erstelle. Warum? Was macht GO eigentlich?



29
@ChrisF - das ist kein Duplikat, obwohl die akzeptierte Antwort auch diese Frage beantwortet. Bei dieser Frage geht es um die Verwendung von "GO" in einer Transaktion - es stellt sich nur heraus, dass es sich überhaupt nicht um einen SQL-Befehl handelt. Diese Frage ist viel allgemeiner und versucht, eine endgültige Antwort auf Fragen zum Befehl GO in SSMS zu geben.
Tvanfosson

3
Schauen Sie sich auch diesen Link an: Wofür sind Batching-Anweisungen gut?
Zain Rizvi

Microsoft-Dokumentation: SQL Server-Dienstprogrammanweisungen - GO : Der Stapel vor GO wird die angegebene Anzahl von Malen ausgeführt.
Minuten

Antworten:


304

Es ist ein Batch-Terminator, Sie können ihn jedoch nach Belieben ändern Alt-Text


80
gbn machen es SELECT und schauen Sie, was passiert :-)
SQLMenace

14
Vielen Dank! Was ist dann der Sinn der GO-Anweisung? Das mag dumm klingen, aber was bedeutet "Code-Batch"? msdn sagt nach GO, dass die Lebensdauer der Variablen abläuft. Klingt nichts mit Transaktionsverpflichtung zu tun, oder? Gibt es Umstände, unter denen ich die GO-Anweisung in meinen Skripten behalten sollte?
Kate1138

4
Dies bedeutet, dass alle T-SQL-Vorgänge "sofort" ausgeführt werden. Soweit ich weiß, ist es mit einem Semikolon (OLEDB / Oracle) austauschbar. Wenn Sie beispielsweise ein großes Skript nach der Bereitstellung haben, kann eine GO-Anweisung zwischen den Zeilen den im Skript verwendeten Speicher unterstützen.
Anthony Mason

4
Diese Antwort erklärt nicht wirklich "was es tatsächlich tut" oder das Warum
Andrew

Nach dem Lesen der Antwort von @tvanfosson: Ist es wirklich mit Semikolon austauschbar?
WoIIe

299

Da das Management Studio 2005 scheint es , dass Sie verwenden können , GOmit einem intParameter, wie zB:

INSERT INTO mytable DEFAULT VALUES
GO 10

Das obige fügt 10 Zeilen ein mytable. Im Allgemeinen GOwerden die zugehörigen SQL-Befehle nmal ausgeführt .


199

Der Befehl GO ist keine Transact-SQL-Anweisung, sondern ein spezieller Befehl, der von mehreren MS-Dienstprogrammen einschließlich des SQL Editor Management Studio-Code-Editors erkannt wird.

Der Befehl GO wird verwendet, um SQL-Befehle in Stapeln zu gruppieren, die zusammen an den Server gesendet werden. Die im Stapel enthaltenen Befehle, dh der Befehlssatz seit dem letzten GO-Befehl oder dem Start der Sitzung, müssen logisch konsistent sein. Beispielsweise können Sie eine Variable nicht in einem Stapel definieren und dann in einem anderen verwenden, da der Umfang der Variablen auf den Stapel beschränkt ist, in dem sie definiert ist.

Weitere Informationen finden Sie unter http://msdn.microsoft.com/en-us/library/ms188037.aspx .


37
In welcher Situation ist das Stapeln von Dingen GOtatsächlich nützlich?
nicodemus13


4
Wenn also eine Anweisung im Stapel fehlschlägt, schlägt alles fehl?
MonsterMMORPG

36

GO ist kein SQL-Schlüsselwort.

Es ist ein Batch-Trennzeichen, das von Client-Tools (wie SSMS) verwendet wird, um das gesamte Skript in Batches aufzuteilen

Vorher mehrmals beantwortet ... Beispiel 1


4
Zu meiner Verteidigung habe ich die vorgeschlagenen Duplikate durchgesehen, bevor ich die Frage eingereicht habe - und Ihr Beispiel wurde nicht angezeigt, und es ist auch kein Duplikat, obwohl die Antwort zutreffend ist.
Tvanfosson

26
Es ist schwer hier nach "GO" zu suchen :-)
gbn

20

goUm die vorhandenen Antworten zu ergänzen, müssen Sie beim Erstellen von Ansichten diese Befehle mithilfe von in Stapel aufteilen , da sonst der Fehler angezeigt wird 'CREATE VIEW' must be the only statement in the batch. So können Sie beispielsweise das folgende SQL-Skript nicht ohne ausführengo

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

Erstellen Sie auch Prozeduren
Luciano Santos

2
Dies ist die einzige Antwort, die wirklich den ersten Teil der OP-Frage "... fügt immer einen GO-Befehl ein ... Warum?" Es scheint die meiste Zeit aus Angst zu sein. Es ist nur erforderlich, wenn sich ein Befehl in einem eigenen Stapel befinden muss.
Bielawski

7

Go bedeutet, dass alle SQL-Anweisungen, die davor und nach einem früheren GO geschrieben wurden, zur Verarbeitung an den SQL Server gesendet werden.

Select * from employees;
GO    -- GO 1

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

Im obigen Beispiel werden Anweisungen vor GO 1 in einem Stapel an SQL Server gesendet, und alle anderen Anweisungen vor GO 2 werden in einem anderen Stapel an SQL Server gesendet. Wie wir sehen, hat es Chargen getrennt.


5
Use herDatabase
GO ; 

Der Code fordert Sie auf, die Anweisungen über der GOMarkierung auszuführen . Meine Standarddatenbank ist myDatabase. Anstatt also zu verwenden myDatabase GOund aktuelle Abfragen durchzuführen, um herDatabase zu verwenden


-8

Hier ist die Magie von GO.

SELECT 'Go'
Go 10

SYNTAX: Gehen Sie INT(BatchNumber)

BatchNumber: Es ist keine Zeit aufgetreten

Sieht einfach aus. Es könnte Sie zu Spaghetti führen, wenn Sie tiefer codieren.


Dies versucht, die GOTO-Anweisung zu erklären, wie sie in der Programmierung verwendet wird (glaube ich), wie Batch-Skripte. Sie hat nichts mit der GO-Anweisung in SQL Server zu tun. GO wird normalerweise nicht mit einem INT verwendet, obwohl Sie dies können, wenn Sie eine Charge N-mal verarbeiten möchten. Also nein, das ist nicht die "Magie" von GO. Es wird verwendet, um ein Skript in eine Reihe gruppierter Ausführungen zu unterteilen, wie in den anderen Antworten erläutert.
Heriberto Lugo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.