I SQL Server är en batch en grupp av en eller flera T-SQL-satser som skickas samtidigt från en applikation till SQL Server för exekvering.
Om du stöter på ett fel som detta:
Msg 111, Level 15, State 1, Line 2
'CREATE VIEW' must be the first statement in a query batch.
Det beror förmodligen på att du kombinerar uttalandet med andra satser i samma sats, vilket inte är tillåtet i satser.
Den första delen av felmeddelandet beror på det faktiska uttalandet som du använder i din batch. I mitt fall är det CREATE VIEW
, men det kan lika gärna vara CREATE PROCEDURE
, CREATE FUNCTION
, etc om det är de påståenden du använder.
Exempel
Här är ett exempel på kod som skulle orsaka detta fel:
DROP VIEW IF EXISTS vAllCustomers;
CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;
Resultat:
Msg 111, Level 15, State 1, Line 3 'CREATE VIEW' must be the first statement in a query batch.
I mitt fall försöker jag köra två uttalanden; en DROP VIEW
och en CREATE VIEW
uttalande.
Reglerna för en T-SQL-batch säger att CREATE VIEW
sats kan inte kombineras med andra satser i samma batch.
Med andra ord, CREATE VIEW
kan vara det enda påståendet i sin batch.
Hur du åtgärdar felet
Vi kan fixa ovanstående fel genom att helt enkelt lägga till en batchseparator efter det första uttalandet.
I SQL Server, GO
nyckelord signalerar slutet på en batch. Mer specifikt tolkar SQL Server-verktyg GO
som en signal om att de ska skicka den aktuella batchen av T-SQL-satser till en instans av SQL Server.
Så vi kunde ändra det tidigare uttalandet till detta:
DROP VIEW IF EXISTS vAllCustomers;
GO
CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;
GO
Lägger till GO
löser problemet genom att dela upp uttalanden i två separata grupper.
Observera att GO
är faktiskt inte en del av T-SQL. Det är ett kommando som känns igen av SQL Server-verktyg i syfte att separera satser i batcher.
Du kanske kan ändra batchseparatorn, beroende på vilket verktyg du använder för att ansluta till SQL Server. Till exempel, i SSMS, kan du hitta det här alternativet genom att gå till:Verktyg> Alternativ> Frågekörning> SQL-server och leta efter ett alternativ som säger något i stil med "Ange ett ord eller tecken som kan användas för att separera grupper".