MS Access:如何将 NULL 插入日期时间字段

问题描述 投票:0回答:7

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

提前致谢!

php ms-access odbc ms-access-2007
7个回答
3
投票

尝试以下操作。它对我有用:

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

基本上,您将 null 包装在选择查询中,并让 SQL 弄清楚如何将其表示为插入。


-- 编辑 --

这也应该有效:

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

但由于某种原因,我的默认安装并不适用。

根据我的预感,我将数据库从 ANSI-89 切换到 ANSI-92,并且 VALUES 方法开始工作。我把它改回 ANSI-89,它仍然有效。不仅如此,在我创建的任何新数据库上,它现在也可以工作。奇怪...安装中的某些东西必须通过来回切换而改变(并坚持),而不仅仅是 ANSI-89/92。这似乎就是我们得到不同结果的原因。

您可以通过转到 Office Logo->Access Options->OBJECT DESIGNERS->QUERY DESIGN 来切换数据库 ocwe。更改 SQL Server 兼容语法 (ANSI 92) - 并检查“此数据库”。

好吧,很奇怪。


1
投票

我知道你已经明白了这一点,但还有

dbNull


1
投票

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


0
投票

尝试将其留空

(values fld1,,fld2)

0
投票

您使用哪些库来与 ODBC 通信?
这可能是空值语法(库解释它的方式)有问题吗?

看看这个页面是否有帮助。
注意:我没有使用过 PHP。


0
投票

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

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

对我来说效果很好。


0
投票

我认为它区分大小写。我使用 NULL 并失败了。然后我用了Null。一切都好

© www.soinside.com 2019 - 2024. All rights reserved.