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".