Вот запрос, который выполняется в SQL Server 2008:
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.
Вот запрос Access, который генерирует вышеуказанный запрос:
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
Просто запустил select {t '08:00:00'}
в SSMS, который возвратил 2010-11-17 08:00:00.000
. Это объясняет, почему я не получаю данные обратно. Но, как вы можете видеть, запрос Access явно указывает, какую дату использовать, и сгенерированный TSQL не включает ее. Что делать?
ОБНОВЛЕНИЕ 2
Я провел некоторые эксперименты. Access удаляет дату из сгенерированного TSQL только тогда, когда она 30.12.1899. По-видимому, это особая дата, которую Access использует, когда пользователь хранит только время в поле DateTime, а Access предполагает, что, если он включен в запрос, это не очень важно. Ничего себе.
Итак, я считаю, что мои варианты:
- Вызов хранимых процедур из Access. Я пока не знаю, как это сделать.
- Обновите данные в базе данных сервера sql, указав дату, которая не будет отбрасываться при создании TSQL.
- Попробуйте найти способ включить в сгенерированный TSQL явную дату 30.12.1899. IDEAL
Есть еще идеи?