В 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 сървър и потърсете опция, която казва нещо като „Посочете дума или знак, който може да се използва за разделяне на партиди“.