MS Access: как вставить NULL в поле DateTime - PullRequest
8 голосов
/ 21 августа 2010

У меня есть база данных 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 в целевой базе данных.

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

Ответы [ 5 ]

1 голос
/ 20 октября 2015

INSERT INTO table_name (datetime_field) VALUES (DbNull.Value)

1 голос
/ 24 августа 2010

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

1 голос
/ 21 августа 2010

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

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.Похоже, именно поэтому мы получили разные результаты.

Вы можете переключить ocwe базы данных, перейдя в Office Logo-> Access Options-> OBJECT DESIGNERS-> QUERY DESIGN.Измените синтаксис, совместимый с SQL Server (ANSI 92), и установите флажок «Эта база данных».

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

0 голосов
/ 21 августа 2010

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

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

0 голосов
/ 21 августа 2010

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

(values fld1,,fld2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...