Qual è l'uso di GO in SQL Server Management Studio e Transact SQL?


363

SQL Server Management Studio inserisce sempre un comando GO quando creo una query utilizzando il menu "Script come" facendo clic con il tasto destro. Perché? Cosa fa effettivamente GO?



29
@ChrisF - non è un duplicato, anche se la risposta accettata risponde anche a questa domanda. Quella domanda riguarda l'uso di "GO" in una transazione: si scopre che non è affatto un comando SQL. Questa domanda è molto più generale e tenta di fornire una risposta definitiva alle domande sul comando GO in SSMS.
tvanfosson,

3
Dai anche un'occhiata a questo link: a cosa servono le istruzioni per il batch?
Zain Rizvi,

Documentazione Microsoft: Dichiarazioni su SQL Server Utilities - GO : il batch che precede GO verrà eseguito il numero di volte specificato.
Min

Risposte:


304

Si tratta di un terminatore batch, tuttavia è possibile modificarlo come desiderato testo alternativo


80
gbn lo rende SELEZIONA e guarda cosa succede :-)
SQLMenace,

14
Grazie! Tuttavia, qual è il punto dell'istruzione GO? Può sembrare stupido, ma cosa significa "batch di codice"? msdn dice che dopo GO la durata di vita delle variabili scade. Non ha nulla a che fare con l'impegno della transazione, giusto? Vi sono circostanze in cui dovrei conservare la dichiarazione GO nei miei script?
kate1138,

4
Significa che tutti i T-SQL precedenti verranno eseguiti "subito". Da quello che ho capito, è intercambiabile con un punto e virgola (OLEDB / Oracle). Ad esempio, se si dispone di uno script di post-distribuzione di grandi dimensioni, un'istruzione GO tra le righe può aiutare la memoria utilizzata nello script.
Anthony Mason,

4
Questa risposta non spiega davvero "cosa fa realmente" o il perché
Andrew

Dopo aver letto la risposta di @tvanfosson: è davvero intercambiabile con il punto e virgola?
WoIIe

299

Da Management Studio 2005 sembra che tu possa usare GOun intparametro come:

INSERT INTO mytable DEFAULT VALUES
GO 10

Quanto sopra inserirà 10 righe in mytable. In generale, GOeseguirà i relativi comandi sql nvolte .


199

Il comando GO non è un'istruzione Transact-SQL, ma un comando speciale riconosciuto da diverse utility MS, incluso l'editor di codice di SQL Server Management Studio.

Il comando GO viene utilizzato per raggruppare i comandi SQL in batch che vengono inviati insieme al server. I comandi inclusi nel batch, ovvero l'insieme di comandi dall'ultimo comando GO o dall'inizio della sessione, devono essere logicamente coerenti. Ad esempio, non è possibile definire una variabile in un batch e quindi utilizzarla in un altro poiché l'ambito della variabile è limitato al batch in cui è definita.

Per ulteriori informazioni, vedere http://msdn.microsoft.com/en-us/library/ms188037.aspx .


37
In quale situazione è GOdavvero utile raggruppare le cose ?
nicodemus13


4
quindi se 1 istruzione nel batch fallisce, tutto fallisce?
MonsterMMORPG,

36

GO non è una parola chiave SQL.

È un separatore batch utilizzato dagli strumenti client (come SSMS) per suddividere l'intero script in batch

Prima risposta più volte ... esempio 1


4
A mia difesa, ho esaminato i duplicati suggeriti prima di inviare la domanda - e il tuo esempio non è stato mostrato, né è in realtà un duplicato, sebbene la risposta sia applicabile.
tvanfosson,

26
È difficile cercare "GO" qui :-)
gbn

20

Solo per aggiungere alle risposte esistenti, quando si creano viste è necessario separare questi comandi in batch utilizzando go, altrimenti si otterrà l'errore 'CREATE VIEW' must be the only statement in the batch. Quindi, per esempio, non sarai in grado di eseguire il seguente script sql senzago

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

Creare anche procedure
Luciano Santos,

2
Questa è l'unica risposta che affronta davvero la prima parte della domanda del PO "... inserisce sempre un comando GO .... Perché?". Sembra, il più delle volte, per paura. L'unica volta che è richiesto è quando un comando deve essere nel proprio batch.
bielawski,

7

Go significa, qualunque istruzione SQL sia stata scritta prima e dopo qualsiasi GO precedente, andrà al server SQL per l'elaborazione.

Select * from employees;
GO    -- GO 1

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

Nell'esempio sopra, le istruzioni prima di GO 1 andranno a sql sever in un batch e quindi qualsiasi altra istruzione prima di GO 2 andrà al server sql in un altro batch. Quindi, come vediamo, ha lotti separati.


5
Use herDatabase
GO ; 

Il codice dice di eseguire le istruzioni sopra il GOmarker. Il mio database predefinito è myDatabase, quindi invece di utilizzare myDatabase GOe crea query correnti per utilizzare herDatabase


-8

Ecco la magia di GO.

SELECT 'Go'
Go 10

SINTASSI: vai a INT(BatchNumber)

BatchNumber: numero di volte verificato

Sembra semplice, potrebbe portarti a Spaghetti se digiti più a fondo.


questo sta tentando di spiegare l'istruzione GOTO come utilizzata nella programmazione (credo), come gli script batch .. non ha nulla a che fare con l'istruzione GO in SQL Server. GO di solito non viene utilizzato con un INT, anche se è possibile se si desidera elaborare un batch N di volte .. quindi no, questa non è la "magia" di GO. Viene utilizzato per separare uno script in una serie di esecuzioni raggruppate, come spiegato nelle altre risposte.
Heriberto Lugo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.