我有一个MS Access数据库(无法忍受),并通过
PHP(ODBC)与它通信.
我必须在INSERT语句中包含一个DateTime字段.此字段在Access中未定义为“必需”,这意味着它确实可以为NULL,并且实际上Access数据库中的某些行已经为NULL.
我遇到的问题很简单:如何通过sql插入NULL?我在网上找到的所有结果都是从Visual Basic或C#中解决的,而我在PHP中通过ODBC使用sql.
我已经尝试过以下方法:
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.
提前致谢!
请尝试以下方法.这个对我有用:
INSERT INTO soMetable ( somedate,somethingelse ) SELECT Null AS Expr1,"foo" AS Expr2;
基本上,您在select查询中包装null,并让sql弄清楚如何将其表示为插入.
– 编辑 –
这应该也有效:
INSERT INTO soMetable ( somedate,somethingelse ) values (Null,"foo");
但由于某种原因,它不适用于我的默认安装.
在我预感,我将我的数据库从ANSI-89切换到ANSI-92,并且VALUES方法开始工作.我把它换回ANSI-89,它仍然有效.不仅如此,在我创建的任何新数据库中,它现在也可以工作.奇怪……安装中的某些东西必须通过来回切换来改变(并坚持),而不仅仅是ANSI-89/92.这似乎是我们得到不同结果的原因.
您可以通过转到Office徽标 – >访问选项 – > OBJECT DESIGNERS-> QUERY DESIGN来切换数据库.更改sql Server兼容语法(ANSI 92) – 并选中“此数据库”.
好的,很奇怪.