下面是正在SQL Server 2008上执行查询:Access查询为次
SELECT "dbo"."tblMainData"."recID"
FROM "dbo"."tblMainData"
WHERE ("timeInMain" BETWEEN {t '08:00:00'} AND {t '17:00:00'})
是由Microsoft Access 2007中生成该查询数据库已链接SQL Server 2008数据库中的表。
下面是访问查询生成上面的查询:
SELECT tblMainData.timeInMain
FROM tblMainData
WHERE (((tblMainData.timeInMain) Between #12/30/1899 8:0:0# And #12/30/1899 17:0:0#));
反正我知道有符合此条件的数据。为什么我没有看到预期的结果?
这是我第一次看到{t '08:00:00'}
语法,我假设它应该忽略日期时间字段的日期部分。我找不到任何文档。
感谢您的任何帮助。
UPDATE
刚跑在SSMS,其中返回2010-11-17 08:00:00.000
select {t '08:00:00'}
。这就解释了为什么我没有收回数据。但是,正如您所看到的,Access查询明确指出要使用哪个日期,并且生成的TSQL不包含它。该怎么办?
UPDATE 2
我已经做了一些试验。访问权限仅在12/30/1899时从生成的TSQL中删除日期。显然,这是访问在用户在DateTime字段中仅存储时间时使用的特殊日期,并且Access假定如果它包含在查询中,那么它并不重要。哇。
所以,我相信我的选择是:从Access
- 调用存储过程。我不知道如何做到这一点呢。
- 更新sql server数据库中的数据,其日期不会在TSQL生成时被丢弃。
- 试图找到一种方法来使生成的TSQL包括明确的12/30/1899日期。 IDEAL
还有其他想法吗?
花括号是当前的ODBC转义序列。请参阅:[日期,时间和时间戳转义序列](http://msdn.microsoft.com/en-us/library/ms712360.aspx) – 2010-11-17 21:03:06
是否有可能直接发出TSQL查询,或者他们是否始终通过此访问翻译步骤? – Donnie 2010-11-17 21:25:16
@Donnie - 我不知道。我几乎没有使用Access。我正在尝试为朋友解决这个问题。 – 2010-11-17 21:28:28