为啥此查询在 ODBC 表上运行但在本地表上运行时会失败?

Posted

技术标签:

【中文标题】为啥此查询在 ODBC 表上运行但在本地表上运行时会失败?【英文标题】:Why does this query fail when running on ODBC table but work on local tables?为什么此查询在 ODBC 表上运行但在本地表上运行时会失败? 【发布时间】:2016-03-24 05:06:00 【问题描述】:

我有一个MainUserTable,我正在尝试用NewUserTable 更新它,其中包含所有新用户以及现有用户已更改的所有数据。

我在 access 2013 数据库中运行 SQL 查询以更新 MainUserTable,这是一个 ODBC 连接的 Access Web 应用程序表。如果新用户不存在,它应该添加新用户,并为表中已存在的用户更新任何已更改的数据。

UPDATE NewUserTable 
       LEFT JOIN MainUserTable ON NewUserTable.Username = MainUserTable.Username 
       SET MainUserTable.[First Name] = [NewUserTable].[First Name] 

当我在本地表上运行它,为新用户创建新记录并更新现有用户时,这可以正常工作,但是当它针对 ODBC 表运行时,我收到以下错误:

ODBC--调用失败。 [Microsoft][ODBC Driver Manager] - 无效的参数值 (#0)

只有NewUserTable中有新用户时才会出现此错误;即带有NewUserTable.Username 的记录与MainUserTable.Username 不匹配。如果它没有插入任何新记录,只需更新记录就可以了。

【问题讨论】:

等待...当 NewUserTable (本地)中有新条目时,您是否在 MainUserTable 中创建了新条目?是本地DB和mdb还是accdb? 是的。本地数据库是 accdb。 【参考方案1】:

您在这里所做的实际上与我期望“更新”命令的工作方式相反。如果它打算根据需要插入记录,我希望 ANSI 将其称为“updateorinsert”或“addupdate”之类的名称。

我会分两步来做。

    插入来自NewUserTable 的缺失条目 MainUserTable 的更新与MainUserTableNewUserTable 的直接内连接

为什么您的代码在本地工作可能是 MS 如何实现 update 的产物。有点像当您可以更新或添加到绑定到作为两个表连接的表单的查询时。我不喜欢这种行为,因为对我来说,它何时起作用和何时不起作用的规则是神秘的。而当你转移到不同的数据库时,这种模式不再适用,你必须重写代码或留住人才。

【讨论】:

以上是关于为啥此查询在 ODBC 表上运行但在本地表上运行时会失败?的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 在 Excel 中的 SQL 表上使用参数化查询

MySQL无法在错误的表上运行任何SQL查询

在 Linux (Servicemix) 下运行时在工作表上调用 autoSizeColumn 时崩溃

MySQL查询在大表上很慢

在 Entity Framework Core 中,如何使用数据库级别的条件(不是本地 LINQ)查询连接表上的数据?

为啥在主表上查询很慢?