none
Por que e quando usar o comando GO? RRS feed

  • Pergunta

  • Olá!

    Eu utilizo o comando GO sem saber o porquê, se não coloco, funciona igual.

    Para que serve e quando usá-lo?

    Obrigado!

    quinta-feira, 28 de fevereiro de 2013 18:27

Respostas

  • Marcelo,

    O comando GO informa até aonde deve ser processdo como uma unica batch, veja este codigo abaixo, veja a diferença que o GO faz, uma vez que o segundo select é executado apartado do primeiro.

    DECLARE

    @t1 INT

    SET

    @t1 = 5

    SELECT

    @t1

    GO

    SELECT

    @t1


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta MarceloSchneider quinta-feira, 28 de fevereiro de 2013 18:42
    quinta-feira, 28 de fevereiro de 2013 18:30
    Moderador

Todas as Respostas

  • Marcelo,

    O comando GO informa até aonde deve ser processdo como uma unica batch, veja este codigo abaixo, veja a diferença que o GO faz, uma vez que o segundo select é executado apartado do primeiro.

    DECLARE

    @t1 INT

    SET

    @t1 = 5

    SELECT

    @t1

    GO

    SELECT

    @t1


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Marcado como Resposta MarceloSchneider quinta-feira, 28 de fevereiro de 2013 18:42
    quinta-feira, 28 de fevereiro de 2013 18:30
    Moderador
  • Entendi, obrigado!
    quinta-feira, 28 de fevereiro de 2013 18:42
  • Olá, 

    se executar esse código ele dá erro:

    (1 row(s) affected)
    Msg 137, Level 15, State 2, Line 4
    Must declare the scalar variable "@t1".

    obrigado

    sexta-feira, 1 de março de 2013 11:21
  • Jonas,

    Sim, pois o segundo select nao encontra a declaração da variavel pois estão sendo executados em batchs diferentes devido ao GO no meio das instruções.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Sugerido como Resposta Renato Siqueira sábado, 2 de março de 2013 03:51
    sexta-feira, 1 de março de 2013 11:31
    Moderador
  • então o go separa as aguas, é isso?

    sexta-feira, 1 de março de 2013 11:40
  • Basicamente isso, ele separa os trechos de codigo que serão executados como uma coisa só, ou seja, uma batch.

    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    • Sugerido como Resposta Jonas.8 sexta-feira, 1 de março de 2013 13:37
    sexta-feira, 1 de março de 2013 11:41
    Moderador
  • Basicamente isso, ele separa os trechos de codigo que serão executados como uma coisa só, ou seja, uma batch.

    Entendi. Mas ficou uma dúvida: se eu tenho uma relação de inscruções seguidas do GO, como o exemplo abaixo, elas executam de forma sequencial (sequencia 1, quando terminar, sequencia 2, quando terminar, sequencia 3...) ou ele faz o possível para rodá-las ao mesmo tempo?

    Eu sei que na janela de resultados ele mostra sequencial, mas no decorrer da execução? Alguém tem idéia?

    exec dbo.procedure 1

    go

    exec dbo.procedure 2

    go

    exec dbo.procedure 3

    go

    terça-feira, 16 de dezembro de 2014 11:48
  • Basicamente isso, ele separa os trechos de codigo que serão executados como uma coisa só, ou seja, uma batch.


    Entendi. Mas ficou uma dúvida: se eu tenho uma relação de inscruções seguidas do GO, como o exemplo abaixo, elas executam de forma sequencial (sequencia 1, quando terminar, sequencia 2, quando terminar, sequencia 3...) ou ele faz o possível para rodá-las ao mesmo tempo?

    Eu sei que na janela de resultados ele mostra sequencial, mas no decorrer da execução? Alguém tem idéia?

    exec dbo.procedure 1

    go

    exec dbo.procedure 2

    go

    exec dbo.procedure 3

    go

    Olá Hélder,

    Sim ele executa sequencialmente. Vc pode executar o código abaixo que comprova isso, veja:

    USE [tempdb]
    GO
    
    CREATE TABLE Tabela1
    (nome VARCHAR(10),codigo INT)
    GO
    
    CREATE TABLE Tabela2
    (nome VARCHAR(10),codigo INT)
    GO
    
    CREATE TABLE Tabela3
    (nome VARCHAR(10),codigo INT)
    GO
    
    USE [tempdb]
    SELECT crdate,name FROM sysobjects
    WHERE name IN ('Tabela1','Tabela2','Tabela3')
    GO
    Observe na coluna de criacão dos objetos (crdate), os milisegundos, veja que ele vai obedecer a ordem que for especificada no código T-SQL.

    quarta-feira, 17 de dezembro de 2014 14:57