Qual é a utilização do GO no SQL Server Management Studio e no Transact SQL?


363

O SQL Server Management Studio sempre insere um comando GO quando eu crio uma consulta usando o botão direito do mouse no menu "Script Como". Por quê? O que o GO realmente faz?



29
@ ChrisF - isso não é duplicado, embora a resposta aceita também responda a essa pergunta. Essa pergunta é sobre o uso de "GO" em uma transação - apenas acontece que não é realmente um comando SQL. Essa pergunta é muito mais geral e tenta fornecer uma resposta definitiva para perguntas sobre o comando GO no SSMS.
tvanfosson

3
Veja também este link: Para que servem as instruções de lote?
Zain Rizvi

Documentação da Microsoft: Instruções de utilitários do SQL Server - GO : O lote anterior ao GO executará o número especificado de vezes.
mins

Respostas:


304

É um terminador de lote, mas você pode alterá-lo para o que quiser texto alternativo


80
gbn torná-lo SELECT e olhar para o que acontece :-)
SQLMenace

14
Obrigado! No entanto, qual é o objetivo da declaração GO? Isso pode parecer estúpido, mas o que significa 'lote de código'? O msdn diz que após GO a vida útil das variáveis ​​expirará. Parece nada a ver com o compromisso de transação, certo? Existe alguma circunstância em que devo manter a instrução GO em meus scripts?
precisa saber é o seguinte

4
Isso significa que todo o T-SQL anterior a ele será executado "de uma só vez". Pelo que entendi, é intercambiável com ponto e vírgula (OLEDB / Oracle). Por exemplo, se você tiver um grande script pós-implantação, uma instrução GO entre linhas pode ajudar a memória usada no script.
Anthony Mason

4
Esta resposta realmente não explica "o que realmente faz" ou o porquê
Andrew

Depois de ler a resposta de @tvanfosson: É realmente intercambiável com ponto e vírgula?
WoIIe

299

Desde o Management Studio 2005, parece que você pode usar GOcom um intparâmetro, como:

INSERT INTO mytable DEFAULT VALUES
GO 10

O acima irá inserir 10 linhas em mytable. De um modo geral, GOexecutará os ntempos dos comandos sql relacionados .


199

O comando GO não é uma instrução Transact-SQL, mas um comando especial reconhecido por vários utilitários da MS, incluindo o editor de código do SQL Server Management Studio.

O comando GO é usado para agrupar comandos SQL em lotes que são enviados ao servidor juntos. Os comandos incluídos no lote, ou seja, o conjunto de comandos desde o último comando GO ou o início da sessão, devem ser logicamente consistentes. Por exemplo, você não pode definir uma variável em um lote e usá-la em outro, pois o escopo da variável é limitado ao lote em que está definido.

Para mais informações, consulte http://msdn.microsoft.com/en-us/library/ms188037.aspx .


37
Em que situação os lotes são GOrealmente úteis?
Nicodemus13 21/03


4
Portanto, se uma instrução do lote falhar, tudo falhará?
MonsterMMORPG

36

GO não é uma palavra-chave SQL.

É um separador de lotes usado pelas ferramentas do cliente (como SSMS) para dividir o script inteiro em lotes

Respondido antes várias vezes ... exemplo 1


4
Em minha defesa, examinei as duplicatas sugeridas antes de enviar a pergunta - e seu exemplo não apareceu, nem é realmente uma duplicata, embora a resposta seja aplicável.
tvanfosson

26
É difícil procurar "GO" aqui :-)
gbn

20

Apenas para adicionar às respostas existentes, ao criar visualizações, você deve separar esses comandos em lotes usando go, caso contrário, você receberá o erro 'CREATE VIEW' must be the only statement in the batch. Portanto, por exemplo, você não poderá executar o seguinte script sql semgo

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

Também criar procedimentos
Luciano Santos

2
Esta é a única resposta que realmente aborda a primeira parte da pergunta do OP "... sempre insere um comando GO .... Por quê?". Parece, na maioria das vezes, por medo. O único momento necessário é quando um comando deve estar em seu próprio lote.
bielawski 22/02/19

7

Go significa que quaisquer instruções SQL escritas antes e depois de qualquer GO anterior serão enviadas ao SQL Server para processamento.

Select * from employees;
GO    -- GO 1

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

No exemplo acima, as instruções antes do GO 1 irão para o sql sever em um lote e, em seguida, quaisquer outras instruções antes do GO 2 irão para o sql server em outro lote. Então, como vemos, ele separou lotes.


5
Use herDatabase
GO ; 

O código diz para executar as instruções acima do GOmarcador. Meu banco de dados padrão é myDatabase, portanto, em vez de usar myDatabase GOe faz a consulta atual para usar o herDatabase


-8

Aqui está a mágica do GO.

SELECT 'Go'
Go 10

Sintaxe: INT(BatchNumber)

BatchNumber: nenhum dos momentos ocorreu

Parece simples, pode levar você ao Spaghetti se você codificar mais profundamente.


isso está tentando explicar a instrução GOTO como usada na programação (eu acho), como scripts em lote. não tem nada a ver com a instrução GO no SQL Server. O GO normalmente não é usado com um INT, embora você possa, se desejar processar um lote N várias vezes. Portanto, não, essa não é a "mágica" do GO. É usado para separar um script em uma série de execuções agrupadas, conforme explicado nas outras respostas.
Heriberto Lugo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.