Sempre me confundi quando devo usar a palavra-chave GO após os comandos e se é necessário um ponto-e-vírgula no final dos comandos. Quais são as diferenças e por que / quando devo usá-los?
Quando executo o script Gerar no SQL Server Management Studio, parece que ele usa GO em todos os lugares, mas não o ponto-e-vírgula.
sql
sql-server
HAdes
fonte
fonte
Respostas:
GO
refere-se apenas ao SSMS - não é Transact SQL real, apenas informa ao SSMS para enviar as instruções SQL entre cada umGO
em lotes individuais sequencialmente.O
;
é um delimitador de instrução SQL, mas na maioria das vezes o mecanismo pode interpretar onde suas instruções estão divididas.A principal exceção e o local onde o
;
é usado com mais frequência é antes de uma instrução de expressão de tabela comum.fonte
GO
não é T-SQL enquanto;
éMERGE
instrução deve terminar com um ponto e vírgula.;
está obsoleto, NÃO usá-lo está obsoleto, ou seja, vai se tornar obrigatório de acordo com a fonte.O motivo pelo qual você vê tantos GOs em scripts DDL gerados é por causa da seguinte regra sobre lotes.
Um dos casos de uso para DDL gerado é gerar vários objetos em um único arquivo. Por causa disso, um gerador DDL deve ser capaz de gerar lotes. Como já foi dito, a instrução GO encerra o lote.
fonte
IR
Go é um separador de lote. Isso significa que tudo naquele lote é local para aquele lote específico.
Quaisquer declarações de variáveis, variáveis de tabela, etc, não passam por
GO
instruções.As tabelas #Temp são locais para uma conexão, portanto, abrangem as instruções GO.
Ponto e vírgula
Um ponto-e-vírgula é um terminador de instrução. Isso é usado exclusivamente para identificar que uma instrução específica terminou.
Na maioria dos casos, a própria sintaxe da instrução é suficiente para determinar o final de uma instrução.
Os CTEs, entretanto, exigem que WITH seja a primeira instrução, portanto, você precisa de um ponto e vírgula antes de WITH.
fonte
MERGE
instrução deve terminar com um ponto e vírgula.Você deve usar um ponto-e-vírgula para encerrar todas as instruções SQL. Isso é definido nos padrões SQL,
Claro, na maioria das vezes o SQL Server permite que você omita o terminador de instrução, mas por que adquirir hábitos ruins?
Como outros apontaram, a instrução que precede uma expressão de tabela comum (CTE) deve ser encerrada com um ponto e vírgula. Como consequência, de pessoas que não adotaram totalmente o terminador de ponto e vírgula, vemos o seguinte:
o que eu acho muito estranho. Suponho que faça sentido em um fórum online quando você não pode dizer a qualidade do código no qual ele será colado.
Além disso, uma
MERGE
instrução deve terminar com um ponto e vírgula. Você vê um padrão aqui? Estas são algumas das adições mais recentes ao TSQL que seguem de perto os padrões SQL. Parece que a equipe do SQL Server está seguindo o caminho de obrigar o uso do terminador de ponto e vírgula.fonte
GO é um terminador de lote, um ponto e vírgula é um terminador de instrução.
você usará GO quando quiser ter várias instruções create proc em 1 script, porque create proc deve ser a primeira instrução em um lote. Se você usar expressões de tabela comuns, a instrução anterior precisa ser encerrada com um ponto e vírgula
fonte
MERGE
instrução deve terminar com um ponto e vírgula.