Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Грешка на SQL Server 111:„...трябва да е първият израз в пакет от заявки“

В SQL Server пакетът е група от един или повече T-SQL оператори, изпратени едновременно от приложение към SQL Server за изпълнение.

Ако срещнете грешка като тази:

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

Вероятно е, защото комбинирате изявлението с други оператори в същия пакет, което не е разрешено в пакети.

Първата част от съобщението за грешка ще зависи от действителното изявление, което използвате във вашата партида. В моя случай това е CREATE VIEW , но може също толкова лесно да бъде CREATE PROCEDURE , CREATE FUNCTION , и т.н., ако това са изразите, които използвате.

Пример

Ето пример за код, който би причинил тази грешка:

DROP VIEW IF EXISTS vAllCustomers;

CREATE VIEW vAllCustomers AS
SELECT * FROM Customers;

Резултат:

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

В моя случай се опитвам да изпълня две изявления; a DROP VIEW израз и CREATE VIEW изявление.

Правилата на T-SQL пакет гласи, че CREATE VIEW изявлението не може да се комбинира с други оператори в същия пакет.

С други думи, CREATE VIEW може да бъде единственото изявление в неговата партида.

Как да поправя грешката

Можем да коригираме горната грешка, като просто добавим разделител на партиди след първия израз.

В SQL Server, GO ключова дума сигнализира за края на партида. По-конкретно, помощните програми на SQL Server интерпретират GO като сигнал, че трябва да изпратят текущата партида от T-SQL изрази до екземпляр на SQL Server.

Така че можем да променим предишното изявление на това:

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

Добавяне на GO отстранява проблема, като разделя изявленията на две отделни партиди.

Имайте предвид, че GO всъщност не е част от T-SQL. Това е команда, която се разпознава от помощните програми на SQL Server за целите на разделянето на изрази на пакети.

Може да сте в състояние да промените разделителя на партиди, в зависимост от инструмента, който използвате за свързване към SQL Server. Например в SSMS можете да намерите тази опция, като отидете на:Инструменти> Опции> Изпълнение на заявка> SQL сървър и потърсете опция, която казва нещо като „Посочете дума или знак, който може да се използва за разделяне на партиди“.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо моята ODBC връзка се проваля при стартиране на SSIS натоварване във Visual Studio, но не и при изпълнение на същия пакет с помощта на Execute Package Utility

  2. SQL актуализация от една таблица в друга въз основа на съвпадение на идентификатор

  3. Съхранение на XML данни в SQL Server

  4. Разрешението EXECUTE беше отказано на обекта 'xxxxxxx', база данни 'zzzzzzz', схема 'dbo'

  5. Основи на оператора ALTER TABLE на SQL Server