Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server Error 111:„… musi być pierwszą instrukcją w partii kwerendy”

W programie SQL Server partia to grupa składająca się z co najmniej jednej instrukcji T-SQL wysyłana w tym samym czasie z aplikacji do programu SQL Server w celu wykonania.

Jeśli napotkasz taki błąd:

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

Dzieje się tak prawdopodobnie dlatego, że łączysz instrukcję z innymi instrukcjami w tej samej wiązce, co nie jest dozwolone w partiach.

Pierwsza część komunikatu o błędzie będzie zależeć od rzeczywistego oświadczenia, którego używasz w swojej partii. W moim przypadku jest to CREATE VIEW , ale równie dobrze może to być CREATE PROCEDURE , CREATE FUNCTION , itp., jeśli są to stwierdzenia, których używasz.

Przykład

Oto przykład kodu, który może spowodować ten błąd:

DROP VIEW IF EXISTS vAllCustomers;

CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;

Wynik:

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

W moim przypadku próbuję uruchomić dwa stwierdzenia; DROP VIEW oświadczenie i CREATE VIEW oświadczenie.

Reguły partii T-SQL stwierdzają, że CREATE VIEW wyciągu nie można łączyć z innymi wyciągami w tej samej partii.

Innymi słowy, CREATE VIEW może być jedyną instrukcją w swojej partii.

Jak naprawić błąd

Możemy naprawić powyższy błąd, po prostu dodając separator partii po pierwszej instrukcji.

W SQL Server, GO słowo kluczowe sygnalizuje koniec partii. Dokładniej, narzędzia SQL Server interpretują GO jako sygnał, że powinni wysłać bieżącą partię instrukcji T-SQL do instancji SQL Server.

Możemy więc zmienić poprzednie stwierdzenie na to:

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

Dodawanie GO rozwiązuje problem, rozdzielając instrukcje na dwie oddzielne partie.

Zwróć uwagę, że GO nie jest w rzeczywistości częścią T-SQL. Jest to polecenie rozpoznawane przez narzędzia SQL Server w celu rozdzielania instrukcji na partie.

Możesz mieć możliwość zmiany separatora wsadowego, w zależności od narzędzia używanego do łączenia się z SQL Server. Na przykład w SSMS możesz znaleźć tę opcję, przechodząc do:Narzędzia> Opcje> Wykonywanie zapytania> Serwer SQL i poszukaj opcji, która mówi coś w stylu „Określ słowo lub znak, którego można użyć do oddzielenia partii”.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klauzula ORDER BY jest nieprawidłowa w widokach, funkcjach wbudowanych, tabelach pochodnych, podzapytaniach i typowych wyrażeniach tabelowych

  2. Eksportuj dane zapytań SQL do programu Excel

  3. Zbiorcze wstawianie częściowo cytowanego pliku CSV w programie SQL Server

  4. Czy są jakieś darmowe narzędzia do generowania skryptów 'INSERT INTO' w MS SQL Server?

  5. Typ danych SQL Server BIT — ostateczny przewodnik