MS Access:如何在DateTime字段中插入NULL

时间:2010-08-20 21:30:54

标签: php ms-access odbc ms-access-2007

我有一个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。

提前致谢!

6 个答案:

答案 0 :(得分:1)

尝试以下方法。它对我有用:

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) - 并选中“此数据库”。

好的,很奇怪。

答案 1 :(得分:1)

我知道你已经知道了这一点,但也有dbNull

答案 2 :(得分:1)

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

答案 3 :(得分:0)

尝试将其留空

(values fld1,,fld2)

答案 4 :(得分:0)

您使用什么库来与ODBC通信?
这可能是null值语法的问题,库解释它的方式吗?

请参阅this页面是否有帮助 注意:我没有使用PHP。

答案 5 :(得分:0)

我有这种类型的错误, 试试这个。

INSERT INTO table_name (datetime_field) VALUES (DBNull.value)

对我来说很好。