Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Errore 111 di SQL Server:"... deve essere la prima istruzione in un batch di query"

In SQL Server, un batch è un gruppo di una o più istruzioni T-SQL inviate contemporaneamente da un'applicazione a SQL Server per l'esecuzione.

Se riscontri un errore come questo:

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

Probabilmente è perché stai combinando l'istruzione con altre istruzioni nello stesso batch, cosa che non è consentita nei batch.

La prima parte del messaggio di errore dipenderà dall'istruzione effettiva che stai utilizzando nel batch. Nel mio caso è CREATE VIEW , ma potrebbe essere altrettanto facilmente CREATE PROCEDURE , CREATE FUNCTION , ecc. se queste sono le affermazioni che stai utilizzando.

Esempio

Ecco un esempio di codice che causerebbe questo errore:

DROP VIEW IF EXISTS vAllCustomers;

CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;

Risultato:

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

Nel mio caso, sto cercando di eseguire due istruzioni; un DROP VIEW istruzione e un CREATE VIEW dichiarazione.

Le regole di un batch T-SQL affermano che CREATE VIEW l'istruzione non può essere combinata con altre istruzioni nello stesso batch.

In altre parole, CREATE VIEW può essere l'unica istruzione nel suo batch.

Come correggere l'errore

Possiamo correggere l'errore precedente semplicemente aggiungendo un separatore batch dopo la prima istruzione.

In SQL Server, il GO la parola chiave segnala la fine di un batch. Più specificamente, le utilità di SQL Server interpretano GO come segnale che devono inviare il batch corrente di istruzioni T-SQL a un'istanza di SQL Server.

Quindi potremmo cambiare la precedente affermazione in questa:

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

Aggiunta di GO risolve il problema separando le istruzioni in due batch separati.

Nota che GO in realtà non fa parte di T-SQL. È un comando riconosciuto dalle utilità di SQL Server allo scopo di separare le istruzioni in batch.

Potrebbe essere possibile modificare il separatore batch, a seconda dello strumento utilizzato per connettersi a SQL Server. Ad esempio, in SSMS, puoi trovare questa opzione andando su:Strumenti> Opzioni> Esecuzione query> SQL Server e cerca un'opzione che dica qualcosa come "Specifica una parola o un carattere che può essere utilizzato per separare i batch".