Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Erreur SQL Server 111 :"... doit être la première instruction d'un lot de requêtes"

Dans SQL Server, un lot est un groupe d'une ou plusieurs instructions T-SQL envoyées en même temps d'une application à SQL Server pour exécution.

Si vous rencontrez une erreur comme celle-ci :

Msg 111, Level 15, State 1, Line 2
'CREATE VIEW' must be the first statement in a query batch.

C'est probablement parce que vous combinez l'instruction avec d'autres instructions dans le même lot, ce qui n'est pas autorisé dans les lots.

La première partie du message d'erreur dépendra de l'instruction réelle que vous utilisez dans votre lot. Dans mon cas, c'est CREATE VIEW , mais cela pourrait tout aussi bien être CREATE PROCEDURE , CREATE FUNCTION , etc si ce sont les instructions que vous utilisez.

Exemple

Voici un exemple de code qui provoquerait cette erreur :

DROP VIEW IF EXISTS vAllCustomers;

CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;

Résultat :

Msg 111, Level 15, State 1, Line 3
'CREATE VIEW' must be the first statement in a query batch.

Dans mon cas, j'essaie d'exécuter deux instructions ; une DROP VIEW instruction et une CREATE VIEW déclaration.

Les règles d'un batch T-SQL stipulent que le CREATE VIEW l'instruction ne peut pas être combinée avec d'autres instructions dans le même lot.

En d'autres termes, CREATE VIEW peut être la seule instruction de son lot.

Comment corriger l'erreur

Nous pouvons corriger l'erreur ci-dessus en ajoutant simplement un séparateur de lots après la première instruction.

Dans SQL Server, le GO mot-clé signale la fin d'un lot. Plus précisément, les utilitaires SQL Server interprètent GO comme signal qu'ils doivent envoyer le lot actuel d'instructions T-SQL à une instance de SQL Server.

Nous pourrions donc remplacer la déclaration précédente par celle-ci :

DROP VIEW IF EXISTS vAllCustomers;
GO
CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;
GO

Ajout de GO résout le problème en séparant les instructions en deux lots distincts.

Notez que GO ne fait pas réellement partie de T-SQL. Il s'agit d'une commande reconnue par les utilitaires SQL Server dans le but de séparer les instructions en lots.

Vous pourrez peut-être modifier le séparateur de lots, selon l'outil que vous utilisez pour vous connecter à SQL Server. Par exemple, dans SSMS, vous pouvez trouver cette option en accédant à :Outils> Options> Exécution de la requête> SQL Server et recherchez une option qui dit quelque chose comme "Spécifiez un mot ou un caractère qui peut être utilisé pour séparer les lots".