2009-10-04 13 views

Antwort

50

GO ist eigentlich kein T-SQL-Befehl. Der Befehl GO wurde von Microsoft-Tools eingeführt, um Batchanweisungen wie das Ende einer gespeicherten Prozedur zu trennen. GO wird von den Microsoft SQL-Stack-Tools unterstützt, ist jedoch nicht formal Teil anderer Tools.

Sie können GO nicht in eine SQL-Zeichenfolge einfügen und als Teil eines ADO.NET-Befehlsobjekts senden, da SQL selbst den Begriff nicht versteht. Eine andere Möglichkeit, dies zu demonstrieren, ist mit dem Profiler: Richten Sie einige Anweisungen ein, die GO in Query Analyzer/Management Studio verwenden, und führen Sie dann den Profiler bei der Ausführung aus. Sie werden sehen, dass sie als separate Befehle an den Server ausgegeben werden.

Das Semikolon wird verwendet, um das Ende einer Anweisung selbst zu bezeichnen, nicht unbedingt eine ganze Charge.

http://msdn.microsoft.com/en-us/library/ms188037.aspx

+0

Ich habe eine Verbindung gestartet, um GO zu einem gültigen t-sql-Befehl zu bekommen: https://connect.microsoft.com/SQLServer/feedback/details/3138257/make-go-a-first-class- Sprachschlüsselwort –

21

Semikolon ist ein Anweisungseparator. Die vorherige (n) Anweisung (en) werden nicht notwendigerweise ausgeführt, wenn ein Semikolon angetroffen wird.

GO 

Bezeichnet das Ende einer Charge. Führt den vorherigen Stapel von Anweisungen aus, ebenso wie das Ende des Blocks.

GO 2 

Bedeutet führen Sie den Batch, dass viele Male. Ich denke, ich habe diese Option vielleicht zweimal in meinem Leben benutzt. Andererseits bin ich kein DBA.

0

Ich dachte der; Zeichen trennt eine Liste von SQL-Befehlen, GO weist SQL Server an, alle vorherigen Befehle zu committen.

4

‚GO‘ typischerweise das Ende eines Batch von SQL-Anweisungen, um anzuzeigen, wird verwendet, was bedeutet, dass Sie ein begin transaction und end transaction verpackt in eine einzige Sammlung von Aussagen haben könnten, die zusammen scheitern oder gelingen könnten.

';' wird im Allgemeinen verwendet, um mehrere SQL-Anweisungen voneinander zu trennen. Dies ist in SQL-Scripts, die mehrere Recordsets zurückgeben müssen, z. B. `select * from table1; Wählen Sie * aus Tabelle2; ' Dies würde auf der Client-Seite zu zwei separaten Recordsets führen.

27

"GO" ist ähnlich zu; in vielen Fällen, aber tatsächlich bedeutet das Ende einer Charge.

Jede Charge wird begangen, wenn die „GO“ Anweisung aufgerufen wird, so, wenn Sie:

SELECT * FROM table-that-does-not-exist; 
SELECT * FROM good-table; 

in Batch, dann ist die gut-Tabelle auswählen wird nie aufgerufen, da die erste Auswahl wird ein verursachen Error.

Wenn Sie stattdessen hat:

SELECT * FROM table-that-does-not-exist 
GO 
SELECT * FROM good-table 
GO 

Die erste select-Anweisung bewirkt, dass immer noch einen Fehler, aber da die zweite Aussage in seiner eigenen Charge ist, wird es noch ausführen.

GO hat nichts mit einer Transaktion zu tun.

1

Der Befehl GO bedeutet das Ende einer Charge. Daher sind alle vor GO deklarierten Variablen nach dem GO-Befehl ungültig. Gegen das Semikolon endet der Batch nicht.

Wenn Sie einen DML-Befehl in einer Prozedur verwenden, verwenden Sie das Semikolon anstelle von GO. Zum Beispiel:

CREATE PROCEDURE SpMyProc 
@myProcParam VARCHAR(20) 
AS 
DECLARE @myOtherParam INT = 5 
;DISABLE TRIGGER ALL ON tMyTable 
UPDATE tMyTable SET myVar = @myProcParam, mySecondVar = @myOtherParam 
;ENABLE TRIGGER OLL ON tMyTable 
2
  1. unter SQL Server TSQL (2005 - 2016) zu beachten, dass:

    • Semikolon (;) ist ein Block Terminator.
    • GO ist ein Batch Terminator.
  2. Zusätzlich GO verwendet werden kann, die gleichen DML-Block mehr Male mit folgenden Syntax aufgerufen:

GO [count]

Wo [count] ist eine positive ganze Zahl, gibt an, wie oft der TSQL-Befehlsblock, der dem GO vorausgeht, immer wieder ausgeführt werden soll.

  1. Auch im Gegensatz zu Semikolon, GO zwingend vor einer neuen DDL ist, sagt sie, wenn Sie eine neue Ansicht zu erstellen, da ein Semikolon vorherige Befehle Trennen einen Fehler auslösen. Zum Beispiel:

drop view #temporary_view
GO
Ansicht #another_view erstellen ...
-> keine Fehler

Wenn Sie GO mit einem Semikolon im vorherigen Beispiel ersetzt, wird es Die folgende Fehlermeldung wird ausgegeben:

'CREATE VIEW' muss die erste Anweisung in einem Abfrage-Batch sein.

Verwandte Themen