sql >> Databáze >  >> RDS >> Sqlserver

Chyba serveru SQL 111:„…musí být prvním příkazem v dávce dotazu“

V SQL Server je dávka skupinou jednoho nebo více příkazů T-SQL odeslaných současně z aplikace na SQL Server k provedení.

Pokud narazíte na podobnou chybu:

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

Je to pravděpodobně proto, že kombinujete výpis s jinými výpisy ve stejné dávce, což není v dávkách povoleno.

První část chybové zprávy bude záviset na skutečném prohlášení, které ve své dávce používáte. V mém případě je to CREATE VIEW , ale stejně tak to může být CREATE PROCEDURE , CREATE FUNCTION atd., pokud používáte tyto příkazy.

Příklad

Zde je příklad nějakého kódu, který by způsobil tuto chybu:

DROP VIEW IF EXISTS vAllCustomers;

CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;

Výsledek:

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

V mém případě se pokouším spustit dva příkazy; DROP VIEW a CREATE VIEW prohlášení.

Pravidla pro dávku T-SQL uvádějí, že CREATE VIEW příkaz nelze kombinovat s jinými příkazy ve stejné dávce.

Jinými slovy CREATE VIEW může být jediným příkazem ve své dávce.

Jak opravit chybu

Výše uvedenou chybu můžeme opravit jednoduchým přidáním oddělovače dávky za první příkaz.

V SQL Server, GO klíčové slovo signalizuje konec dávky. Přesněji řečeno, nástroje SQL Server interpretují GO jako signál, že by měli odeslat aktuální dávku příkazů T-SQL do instance SQL Server.

Takže bychom mohli změnit předchozí prohlášení na toto:

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

Přidávání GO řeší problém rozdělením příkazů do dvou samostatných dávek.

Všimněte si, že GO není ve skutečnosti součástí T-SQL. Je to příkaz, který rozpoznávají obslužné programy SQL Serveru za účelem rozdělení příkazů do dávek.

V závislosti na nástroji, který používáte pro připojení k serveru SQL Server, budete možná moci změnit oddělovač dávky. Například v SSMS najdete tuto možnost tak, že přejdete na:Nástroje> Možnosti> Spuštění dotazu> SQL Server a hledejte možnost, která říká něco jako „Zadejte slovo nebo znak, který lze použít k oddělení dávek“.


  1. Při použití GETDATE() na mnoha místech, je lepší použít proměnnou?

  2. MSDTC na serveru „server není k dispozici“

  3. Jak nastavit řazení sloupce na SQL Server (T-SQL)

  4. Najděte řetězec prohledáním všech tabulek na serveru SQL Server