No SQL Server, um lote é um grupo de uma ou mais instruções T-SQL enviadas ao mesmo tempo de um aplicativo para o SQL Server para execução.
Se você encontrar um erro como este:
Msg 111, Level 15, State 1, Line 2
'CREATE VIEW' must be the first statement in a query batch.
Provavelmente é porque você está combinando a instrução com outras instruções no mesmo lote, o que não é permitido em lotes.
A primeira parte da mensagem de erro dependerá da instrução real que você está usando em seu lote. No meu caso é
CREATE VIEW
, mas poderia facilmente ser CREATE PROCEDURE
, CREATE FUNCTION
, etc se essas são as declarações que você está usando. Exemplo
Aqui está um exemplo de algum código que causaria esse erro:
DROP VIEW IF EXISTS vAllCustomers;
CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;
Resultado:
Msg 111, Level 15, State 1, Line 3 'CREATE VIEW' must be the first statement in a query batch.
No meu caso, estou tentando executar duas instruções; a
DROP VIEW
instrução e um CREATE VIEW
demonstração. As regras de um lote T-SQL afirmam que o
CREATE VIEW
A instrução não pode ser combinada com outras instruções no mesmo lote. Em outras palavras,
CREATE VIEW
pode ser a única instrução em seu lote. Como corrigir o erro
Podemos corrigir o erro acima simplesmente adicionando um separador de lote após a primeira instrução.
No SQL Server, o
GO
palavra-chave sinaliza o fim de um lote. Mais especificamente, os utilitários do SQL Server interpretam GO
como um sinal de que eles devem enviar o lote atual de instruções T-SQL para uma instância do SQL Server. Assim, poderíamos alterar a declaração anterior para isso:
DROP VIEW IF EXISTS vAllCustomers;
GO
CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;
GO
Adicionando
GO
corrige o problema separando as instruções em dois lotes separados. Observe que
GO
não é realmente parte do T-SQL. É um comando reconhecido pelos utilitários do SQL Server com a finalidade de separar instruções em lotes. Você poderá alterar o separador de lotes, dependendo da ferramenta usada para se conectar ao SQL Server. Por exemplo, no SSMS, você pode encontrar essa opção acessando:Ferramentas> Opções> Execução da consulta> SQL Server e procure uma opção que diga algo como “Especifique uma palavra ou caractere que possa ser usado para separar lotes”.