无效的SQL语句,需要SELECT

时间:2018-09-05 19:31:12

标签: sql ms-access

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等

但是我有一条select语句。

2 个答案:

答案 0 :(得分:2)

马上就要为日期时间变量分配文本值了。...

也就是SQL Server SQL,而不是MS Access SQL。不一样的东西。

答案 1 :(得分:0)

我想您过去使用过且效果很好的格式如下:

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)。

(希望我没有完全错)