MS Access: Как вставить NULL в поле DateTime

У меня есть база данных MS Access (невыносимо), и я общаюсь с ней через PHP (ODBC).

Есть поле DateTime, которое я должен включить в свой INSERT Это поле НЕ определено как «Обязательное» в Access, что означает, что оно действительно поддерживает NULL, и на самом деле некоторые строки в базе данных Access уже имеют значение NULL.

Проблема, с которой я столкнулся, проста: как вставить NULL через SQL? Все результаты, которые я нашел в Интернете, относятся к этому с помощью чего-то вроде Visual Basic или C #, тогда как я использую SQL через ODBC в PHP.

Я уже пробовал следующее:

INSERT INTO table_name (datetime_field) VALUES (NULL)
INSERT INTO table_name (datetime_field) VALUES (#NULL#)
INSERT INTO table_name (datetime_field) VALUES ('NULL')
INSERT INTO table_name (datetime_field) VALUES ('#NULL#')
INSERT INTO table_name (datetime_field) VALUES ('')

(В моем запросе около 30 других столбцов.)

Точная ошибка, которую я получаю: «Несоответствие типа данных в выражении критерия» при попытке »или NULL. Остальные возвращают ошибку синтаксического анализа (по понятным причинам).

Обратите внимание, что я должен включить поле в оператор INSERT. Поле имеет значение по умолчанию, но во многих случаях исходные данные, которые я транспортирую, имеют значение NULL, которое также должно быть NULL в целевой базе данных.

Заранее спасибо!

8
задан BIBD 21 August 2010 в 19:07
поделиться

4 ответа

Попробуйте просто оставить поле пустым

(values fld1,,fld2)
0
ответ дан 6 December 2019 в 00:53
поделиться

Попробуйте следующее. У меня это работает:

INSERT INTO sometable ( somedate, somethingelse )
SELECT Null AS Expr1, "foo" AS Expr2;

По сути, вы обертываете нуль в запросе выбора и позволяете SQL выяснить, как представить его во вставке.


- РЕДАКТИРОВАТЬ -

Это ДОЛЖНО также работать:

INSERT INTO sometable ( somedate, somethingelse )
values (Null , "foo");

Но по какой-то причине этого не происходит с моей установкой по умолчанию.

Как я догадываюсь, я переключил свою БД с ANSI-89 на ANSI-92, и метод VALUES начал работать. Я снова переключил его на ANSI-89, и он все еще работает. Мало того, что теперь с ЛЮБОЙ новой базой данных, которую я создаю, она также работает. Странно ... что-то в установке должно быть изменено (и застряло) из-за переключения вперед и назад, это не только ANSI-89/92. Кажется, поэтому мы получали разные результаты.

Вы можете переключить режим работы базы данных, выбрав Логотип Office-> Параметры доступа-> ДИЗАЙНЕРЫ ОБЪЕКТОВ-> ДИЗАЙН ЗАПРОСА. Измените синтаксис, совместимый с SQL Server (ANSI 92) - и отметьте «Эта база данных».

Хорошо, очень странно.

1
ответ дан 6 December 2019 в 00:53
поделиться

Какие библиотеки вы используете для связи с ODBC?
Может быть проблема с синтаксисом для нулевых значений, с тем, как его интерпретирует библиотека?

Посмотрите, поможет ли эта страница.
Примечание: я не работал с PHP.

0
ответ дан 6 December 2019 в 00:53
поделиться

Я знаю, что вы уже поняли это, но есть еще dbNull

1
ответ дан 6 December 2019 в 00:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: