Неверный оператор SQL, ожидая SELECT - PullRequest
0 голосов
/ 05 сентября 2018
SET NOCOUNT ON

DECLARE @StartDate datetime = '[Start Date]', @EndDate datetime = '[End Date]'

SELECT ROWDATE, CALLID, DIALED_NUM
FROM oauser.CmsCallHistory 
WHERE DIALED_NUM IN ('6582000', '6752000')
  AND SEGSTART BETWEEN DateAdd(hh, -7, @StartDate) AND DateAdd(hh, -4, @EndDate) 
  AND sourceid = 1;

Я использовал этот формат в прошлом, и он работал нормально, но теперь я получаю сообщение об ошибке

Неверный оператор SQL, ожидание SELECT и т. Д.

Но у меня есть выборочное утверждение.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Полагаю, что формат, который вы использовали в прошлом и который работал нормально, выглядит примерно так:

SELECT ROWDATE, CALLID, DIALED_NUM
FROM CmsCallHistory 
WHERE DIALED_NUM IN ('6582000', '6752000')
  AND SEGSTART BETWEEN DateAdd("h", -7, [Start Date]) AND DateAdd("h", -4, [End Date]) 
  AND sourceid = 1;

Вы наверняка использовали это в MS Access, и при открытии запроса (отображении таблицы данных) Access действительно обратился к вам за помощью, указав значения [Start Date] и [End Date] (поскольку Access не может обрабатывать эти выражения самостоятельно).

Теперь (благодаря моим навыкам в clearvoyance) вы сидели перед окном SSMS и пытались «перенести» свой опыт на следующий уровень, базу данных MS SQL Server. Так как ваши квадратные скобки были подчеркнуты красным, вы объявили переменные, и после того, как заключили квадратные скобки в одинарные кавычки, красные линии исчезли (ууу!) ... рад был слишком рано. В SQL Server назначение строк в кавычках переменным datetime будет работать, но только в том случае, если эти строки можно преобразовать в значение datetime. К сожалению, '[Start Date]' не является кандидатом на это. И поскольку Microsoft создала SSMS (SQL Server Management Studio) в основном для «управления» базой данных, они не сделали SSMS настолько умной (удобной для конечного пользователя), чтобы интерпретировать квадратные скобки в качестве параметров и создавать маленькие всплывающие окна для запроса. пользователь для значений. Сам SQL Server не имеет графического пользовательского интерфейса, он может только получать команды SQL, обрабатывать их и возвращать результаты. Это то, что вы, вероятно, узнали, поэтому вы скопировали код из SSMS обратно в Access ... но Access хочет, чтобы запрос начинался с оператора SELECT (или UPDATE и т. Д.). Access не может выполнить произвольный код T-SQL.

Вывод: вам придется либо разрешить Access обрабатывать запрос и отображать всплывающие окна параметров, как в прошлом (это означает, что вы должны использовать синтаксис Access), либо вы должны найти способ передачи значений параметров в SQL Server. с использованием сквозных запросов и / или кода VBA (если вообще используется MS Access).

(надеясь, что я не совсем неправ)

0 голосов
/ 05 сентября 2018

Сразу же вы назначаете текстовые значения переменным даты и времени ....

Также это SQL Server SQL, а не MS Access SQL. Не то же самое.

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