sql >> Database >  >> RDS >> Sqlserver

SQL Server-fout 111:"... moet de eerste instructie in een querybatch zijn"

In SQL Server is een batch een groep van een of meer T-SQL-instructies die tegelijkertijd van een toepassing naar SQL Server worden verzonden voor uitvoering.

Als u een fout als deze tegenkomt:

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

Dit komt waarschijnlijk omdat u de verklaring combineert met andere verklaringen in dezelfde batch, wat niet is toegestaan ​​in batches.

Het eerste deel van het foutbericht is afhankelijk van de feitelijke verklaring die u in uw batch gebruikt. In mijn geval is het CREATE VIEW , maar het zou net zo goed CREATE PROCEDURE kunnen zijn , CREATE FUNCTION , enz. als dat de uitspraken zijn die u gebruikt.

Voorbeeld

Hier is een voorbeeld van een code die deze fout zou veroorzaken:

DROP VIEW IF EXISTS vAllCustomers;

CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;

Resultaat:

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

In mijn geval probeer ik twee verklaringen uit te voeren; een DROP VIEW statement en een CREATE VIEW verklaring.

De regels van een T-SQL-batch stellen dat de CREATE VIEW verklaring kan niet worden gecombineerd met andere verklaringen in dezelfde batch.

Met andere woorden, CREATE VIEW kan het enige statement in zijn batch zijn.

Hoe de fout op te lossen

We kunnen de bovenstaande fout oplossen door simpelweg een batchscheidingsteken toe te voegen na de eerste instructie.

In SQL Server, de GO trefwoord geeft het einde van een batch aan. Meer specifiek interpreteren SQL Server-hulpprogramma's GO als een signaal dat ze de huidige batch T-SQL-instructies naar een exemplaar van SQL Server moeten sturen.

Dus we zouden de vorige verklaring in dit kunnen veranderen:

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

GO toevoegen lost het probleem op door de instructies in twee afzonderlijke batches te scheiden.

Merk op dat GO maakt eigenlijk geen deel uit van T-SQL. Het is een commando dat wordt herkend door SQL Server-hulpprogramma's voor het scheiden van instructies in batches.

U kunt mogelijk het batchscheidingsteken wijzigen, afhankelijk van het hulpprogramma dat u gebruikt om verbinding te maken met SQL Server. In SSMS kunt u deze optie bijvoorbeeld vinden door naar:Extra . te gaan> Opties> Uitvoering van zoekopdracht> SQL-server en zoek naar een optie die iets zegt als "Geef een woord of teken op dat kan worden gebruikt om batches te scheiden".


  1. Mysql-dekking versus composiet versus kolomindex

  2. PHP PDO:charset, setnamen?

  3. Hoe u uw SQL Server-database documenteert?

  4. Bereken percentiel van frequentie in MySQL