При создании пустой процедуры или процедуры содержащей только комментарии, при выполнении скрипта возникает ошибка Incorrect syntax near ‘END’. Процедура создается в MS SQL 2005 после не продолжительных экспериментов оказалось, что процедура, в которой нет ни одного оператора просто не принимается в MS SQL 2005. Это вполне логично, однако иногда вводит в тупик такой вот не понятной ошибкой.
Вот так не отрабатывает скрипт выдает ошибку Incorrect syntax near ‘END’.
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[up_MyProc]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[up_MyProc] go create procedure [dbo].[up_MyProc] @Param1 INT = 0, @Param2 INT = 0, @Param3 INT = 0 AS BEGIN END IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[up_MyProc]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[up_MyProc] go create procedure [dbo].[up_MyProc] @Param1 INT = 0, @Param2 INT = 0, @Param3 INT = 0 AS BEGIN /* My Comment */ END
А вот так отрабатывает без ошибок
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[up_MyProc]') AND type in (N'P', N'PC')) DROP PROCEDURE [dbo].[up_MyProc] go create procedure [dbo].[up_MyProc] @Param1 INT = 0, @Param2 INT = 0, @Param3 INT = 0 AS BEGIN PRINT '!'; END
Как оказалось MS SQL 2005 в принципе плохо реагирует на блоки BEGIN END, которые не содержат в
себе никаких команд. Т.е. пустые или заполнены комментариями.
Еще интересные записи по данной теме
Tags: MS SQL 2005, SQL