【问题标题】:TableAdapter Configuration Wizard cannot recognize sql statement "DATE()"TableAdapter 配置向导无法识别 sql 语句“DATE()”
【发布时间】:2013-02-16 22:52:03
【问题描述】:

我需要在我的程序中进行报告。 然后,我使用这个 sql 代码过滤将在报表查看器中显示的数据:

SELECT * 
FROM Order 
WHERE OrDate=DATE() OR OrDate>=DATE() - 7;

当我点击下一步时,出现此错误

生成的 SELECT 语句。 ')' 附近的 WHERE 子句出错。 无法解析查询文本。

请帮我解决这个错误。

【问题讨论】:

  • 你在用什么RDBMSRDBMS 代表关系数据库管理系统RDBMS is the basis for SQL,适用于所有现代数据库系统,如 MS SQL Server、IBM DB2、Oracle、MySQL 等...
  • 首先,你不需要 OrDate=DATE() 因为它只是测试今天,当你有 OrDate>=DATE() - 7 测试从 1 周前开始的任何东西,包括今天。其次,即使它不能解决您的问题,也要更改保留字“order”,因为这只是一个好习惯。第三,尝试按照 Adam 的建议将 (DATE() - 7) 放在括号中。
  • 感谢您的所有帮助。现在它正在工作。 :)

标签: c# sql winforms ms-access report


【解决方案1】:

您是否希望 Date 返回今天的日期?我以为是 GETDATE() http://msdn.microsoft.com/en-gb/library/ms188383.aspx

如果您使用的是 SQL Server 2008

选择 选择 * 来自 [订单] WHERE OrDate >= CONVERT(date, DATEADD(DAY, -7, GETDATE()))

【讨论】:

  • GETDATE() 代表SQL Server
  • 啊,刚刚注意到评论 - MS Access
  • 我想显示 1 周的日期。
  • 是不是就像您在 Date()-7 => "WHERE OrDate = DATE() OR OrDate >= (DATE() - 7) 周围缺少括号一样简单
【解决方案2】:

问题不是因为DATE(),而是因为表名ORDER

在大多数 RDBMS 中,ORDER 是保留关键字。使用保留关键字时,请使用供应商特定的分隔符对其进行转义。在SQL Server 中,可以使用括号。

SELECT  * 
FROM   [Order] 
WHERE  OrDate = DATE() OR 
       OrDate >= DATE() - 7;

来自 Access 文档,

如果保留字已被使用,您可以通过以下方式避免错误消息 用括号 ([ ]) 将每个出现的单词括起来。然而, 最好的办法是把名字改成非保留字。

【讨论】:

  • 错误信息是什么? DATE() 有效。看这里Use current date and time in calculations
  • 这是错误信息。生成的 SELECT 语句。 ')' 附近的 WHERE 子句出错。无法解析查询文本。
  • 您使用的是什么版本的访问权限?你已经用括号括住表名了吗?
  • 我将表的名称从 Order 更改为 OrderItems 以避免使用保留关键字,但没有任何反应。
  • 我测试了这个查询,它按原样工作(使用 [] 围绕 Order as @JW 提到的。因为看起来你是在 C# 中生成这个查询,也许你应该用实际的日期值而不是依赖于日期函数。您可能仍然必须按照正常的访问协议用 # 包围日期。此外,由于 OrDate>=DATE() - 7 包括 OrDate=Date,因此您的实际条件没有意义()
猜你喜欢
  • 1970-01-01
  • 2011-07-20
  • 2021-08-19
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 2021-12-03
  • 2017-01-03
  • 2011-01-23
相关资源
最近更新 更多