2010-05-25 18 views
19

Sono nuovo di TSQL e mi chiedo che cosa significhi realmente la dichiarazione GO. Per me sembra solo buttato lì dove sembra che si adatti.Qual è il significato dell'istruzione GO in TSQL

Immagino che in qualche modo dice al server SQL di eseguire la dichiarazione precedente? Cosa succede se non li usi affatto? Qualcuno potrebbe dare un esempio in cui una dichiarazione si romperà se non utilizzo uno GO.

Prego elaborare.

+0

possibile duplicato di [Istruzione T-SQL GO] (http://stackoverflow.com/questions/2668529/t-sql-go-statement) – Thomas

risposta

14

Si tratta di un terminale lotto

questo si romperà

declare @i int 
set @i =5 

declare @i int 
set @i =6 

Select @i 

Msg 134, livello 15, stato 1, riga 5 Il nome della variabile '@i' è già stato dichiarato. I nomi delle variabili devono essere univoci all'interno di un batch di query o di una stored procedure.

questo funzionerà

declare @i int 
set @i =5 

go 
declare @i int 
set @i =6 

Select @i 
10

Termina il lotto.

È raramente necessario e viene utilizzato molto più spesso di quanto dovrebbe. Un posto valido è nella programmazione del proc memorizzato, dove prima si controlla se il proc esiste e lo si elimina se non lo fa. Quindi si utilizza un'istruzione go per terminare il batch poiché l'istruzione proc create deve essere la prima dichiarazione di un batch.

+1

Un altro posto valido e comune è con i comandi ALTER VIEW nel TSQL. ''ALTER VIEW' deve essere l'unica dichiarazione nel batch'. Ad esempio, è necessario un 'GO' prima e dopo ALTER VIEW. – mmcrae

6

proposito. In realtà non è un comando TSQL. È appena utilizzato dagli strumenti di Microsoft DB per separare due batch di comandi.

In effetti, è possibile configurarlo come una parola diversa in SSMS se si desidera utilizzare l'opzione Opzioni preferenza separazione partite.

Il punto principale in cui questa distinzione è importante è che SQL Will si bloccherà sull'istruzione GO se si tenta di utilizzarli nelle query tramite una connessione al database dal codice, ad esempio tramite ADO.NET.