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

SQL Server-fejl 111:"...skal være den første sætning i en forespørgselsbatch"

I SQL Server er en batch en gruppe af en eller flere T-SQL-sætninger sendt på samme tid fra en applikation til SQL Server til udførelse.

Hvis du støder på en fejl som denne:

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

Det er sandsynligvis fordi du kombinerer erklæringen med andre erklæringer i samme batch, hvilket ikke er tilladt i batches.

Den første del af fejlmeddelelsen vil afhænge af den faktiske erklæring, du bruger i din batch. I mit tilfælde er det CREATE VIEW , men det kunne lige så nemt være CREATE PROCEDURE , CREATE FUNCTION osv., hvis det er de udsagn, du bruger.

Eksempel

Her er et eksempel på en kode, der ville forårsage denne fejl:

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 mit tilfælde forsøger jeg at køre to udsagn; en DROP VIEW sætning og en CREATE VIEW erklæring.

Reglerne for en T-SQL-batch angiver, at CREATE VIEW Udsagn kan ikke kombineres med andre udsagn i samme batch.

Med andre ord, CREATE VIEW kan være den eneste erklæring i sin batch.

Sådan rettes fejlen

Vi kan rette ovenstående fejl ved blot at tilføje en batch-separator efter den første sætning.

I SQL Server er GO nøgleord signalerer slutningen af ​​en batch. Mere specifikt fortolker SQL Server-værktøjer GO som et signal om, at de skal sende den aktuelle batch af T-SQL-sætninger til en forekomst af SQL Server.

Så vi kunne ændre det tidligere udsagn til dette:

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

Tilføjer GO løser problemet ved at adskille erklæringerne i to separate batches.

Bemærk, at GO er faktisk ikke en del af T-SQL. Det er en kommando, der genkendes af SQL Server-værktøjer med det formål at adskille sætninger i batches.

Du kan muligvis ændre batchseparatoren, afhængigt af det værktøj, du bruger til at oprette forbindelse til SQL Server. For eksempel i SSMS kan du finde denne mulighed ved at gå til:Værktøjer> Valgmuligheder> Forespørgselsudførelse> SQL-server og se efter en mulighed, der siger noget som "Angiv et ord eller tegn, der kan bruges til at adskille batches".


  1. Hvad er SQL Server? (Definition, versioner, udgaver)

  2. Sådan konverteres PostgreSQL 9.4's jsonb-type til at flyde

  3. Returner lagrede procedurer og funktioner i en SQL Server-database:RUTINER (T-SQL-eksempler)

  4. SQL rækker til kolonner