为什么此查询在 ODBC table 上 运行 时失败但在本地 tables 上工作?
Why does this query fail when running on ODBC table but work on local tables?
我有一个 MainUserTable
,我正在尝试用一个 NewUserTable
更新它,其中包含所有新用户和为现有用户更改的任何数据。
我有一个 SQL 查询 运行 在 access 2013 数据库中更新 MainUserTable
,它是一个 ODBC 连接的 Access 网络应用程序 table。如果新用户不存在,它应该添加新用户,并为 table 中已经存在的用户更新任何已更改的数据。
UPDATE NewUserTable
LEFT JOIN MainUserTable ON NewUserTable.Username = MainUserTable.Username
SET MainUserTable.[First Name] = [NewUserTable].[First Name]
这在我 运行 在本地 tables 上按预期工作,为新用户创建新记录并更新现有用户,但是当它 运行 针对 ODBC table 我收到以下错误:
ODBC--call failed.
[Microsoft][ODBC Driver Manager] - Invalid argument value (#0)
只有在 NewUserTable
中有新用户时才会出现此错误;即 NewUserTable.Username
与 MainUserTable.Username
不匹配的记录。如果它没有插入任何新记录,仅更新记录就可以正常工作。
您在这里所做的实际上与我期望 "update" 命令的工作方式相反。如果它打算根据需要插入一条记录,我希望 ANSI 将其称为 "updateorinsert" 或 "addupdate".
我会分两步进行。
- 插入
NewUserTable
中缺失的条目
MainUserTable
的更新,使用 MainUserTable
和 NewUserTable
的直接内部联接
您的代码在本地运行的原因可能是 MS 实施方式的产物 update
。有点像当您可以更新或添加到绑定到连接两个表的表单的查询时。我不喜欢这种行为,因为对我来说,它何时起作用和不起作用的规则是神秘的。当您迁移到不同的数据库时,该模式不再有效,您必须重写代码或留住人员。
我有一个 MainUserTable
,我正在尝试用一个 NewUserTable
更新它,其中包含所有新用户和为现有用户更改的任何数据。
我有一个 SQL 查询 运行 在 access 2013 数据库中更新 MainUserTable
,它是一个 ODBC 连接的 Access 网络应用程序 table。如果新用户不存在,它应该添加新用户,并为 table 中已经存在的用户更新任何已更改的数据。
UPDATE NewUserTable
LEFT JOIN MainUserTable ON NewUserTable.Username = MainUserTable.Username
SET MainUserTable.[First Name] = [NewUserTable].[First Name]
这在我 运行 在本地 tables 上按预期工作,为新用户创建新记录并更新现有用户,但是当它 运行 针对 ODBC table 我收到以下错误:
ODBC--call failed.
[Microsoft][ODBC Driver Manager] - Invalid argument value (#0)
只有在 NewUserTable
中有新用户时才会出现此错误;即 NewUserTable.Username
与 MainUserTable.Username
不匹配的记录。如果它没有插入任何新记录,仅更新记录就可以正常工作。
您在这里所做的实际上与我期望 "update" 命令的工作方式相反。如果它打算根据需要插入一条记录,我希望 ANSI 将其称为 "updateorinsert" 或 "addupdate".
我会分两步进行。
- 插入
NewUserTable
中缺失的条目
MainUserTable
的更新,使用MainUserTable
和NewUserTable
的直接内部联接
您的代码在本地运行的原因可能是 MS 实施方式的产物 update
。有点像当您可以更新或添加到绑定到连接两个表的表单的查询时。我不喜欢这种行为,因为对我来说,它何时起作用和不起作用的规则是神秘的。当您迁移到不同的数据库时,该模式不再有效,您必须重写代码或留住人员。