Получение ошибки в SQL Server при выполнении этого оператора SQL - PullRequest
0 голосов
/ 11 апреля 2019

Я получаю сообщение об ошибке

Неверный синтаксис рядом с ')'

Пожалуйста, найдите здесь SQL-запрос, который я выполняю - я не могу определить, в чем ошибка. На сервере SQL он указывает на закрывающую последнюю закрывающую скобку. Пожалуйста помоги. Редактирование SQL, который теперь дает еще одну ошибку. ВЫБЕРИТЕ Crontaskname, INSTANCENAME, график, LASTRUN ОТ (ВЫБЕРИТЕ Crontaskname, INSTANCENAME, график, LASTRUN, (CASE WHEN (((CASE (SUBSTRING (расписание, - (LEN (расписание)) - (CHARINDEX (',', расписание) - 2)), 1)) WHEN 'THEN lastrun + (1/86400 * SUBSTRING (расписание, 0, (CHARINDEX (', ', расписание) -2))) + 0,2 WHEN THEN lastrun + (1/1440 * SUBSTRING (расписание, 0, (CHARINDEX (',', расписание) -2))) + 0,2 WHEN THEN lastrun + (1/24 * SUBSTRING (расписание, 0, (CHARINDEX (',', расписание) -2))) КОГДА «ПОСЛЕ ТОГО, ЧТО Lastrun + SUBSTRING (расписание, 0, (CHARINDEX (',', расписание) -2)) КОГДА 'w' THEN lastrun + (7 * SUBSTRING (расписание, 0, (CHARINDEX (',', расписание) -2))) КОГДА 'M' THEN DATEADD (MONTH, SUBSTRING (расписание, 0, (CHARINDEX (',', schedule, ',') - 2)), lastrun) WHEN 'y THEN DATEADD (MONTH, 12 * (SUBSTRING (расписание, 0, (CHARINDEX (', ', расписание,', ') - 2))), lastrun) END) - getdate ()) <0) ТОГДА ПЛОХО ELSE 'ХОРОШО' END) AS Status ОТ (ВЫБЕРИТЕ crontaskname, имя_экземпляра, график, (ВЫБЕРИТЕ lastrun ИЗ задачного планировщика AS B ГДЕ B.taskname = ISNULL (A.crontaskname, '') + '.' + ISNULL (A.instancename, '') как lastrun ОТ crontaskinstance AS A ГДЕ имя экземпляра В («SEQQOUT_SYS_11», «SEQQOUT_SYS_21», «SEQQOUT_SYS_12») И активный = 1 И crontaskname <> 'REPORTSCHEDULE') AS X) AS Cron WHERE Статус = 'ПЛОХОЙ';

1 Ответ

0 голосов
/ 11 апреля 2019

Я нашел несколько проблем.

  • В табличном выражении внутри табличного выражения (с запросом SELECT для таблицы crontaskinstance) псевдоним отсутствует ... Если я даю псевдоним, кажется, что все анализируется правильно.
  • В одном из блоков WHEN во внутреннем выражении CASE отсутствует закрывающая скобка.
  • Поле sysdate неизвестно.

Это насколько я получил ...

Как уже сказал @Larnu ... Вам действительно нужно отформатировать код, чтобы быстрее получать ошибки такого рода. Возможно, использование CTE также может быть полезным.

Edit:

Я пошел немного дальше. Получил ошибку «Аргумент типа данных varchar недопустим для аргумента 3 функции charindex». Здесь я отказываюсь от рассмотрения этого запроса. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...