为什么在ODBC表上运行时此查询失败但在本地表上工作?

时间:2016-03-24 05:06:01

标签: sql ms-access odbc

我有一个MainUserTable我想用NewUserTable更新,其中包含任何新用户以及现有用户已更改的所有数据。

我在访问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驱动程序管理器] - 参数值无效(#0)

仅当NewUserTable中有新用户时才会出现此错误。即NewUserTable.UsernameMainUserTable.Username不匹配的记录。如果它没有插入任何新记录,只需更新记录即可正常工作。

1 个答案:

答案 0 :(得分:1)

你在这里做的事实上与我期望的更新"的方式相反。命令工作。如果打算根据需要插入记录,我希望ANSI称之为" updateorinsert"或" addupdate"。

我会做两步。

  1. NewUserTable
  2. 插入缺失的条目
  3. MainUserTable的更新MainUserTable以及NewUserTableupdate
  4. 为什么你的代码在本地工作可能是MS如何实现{{1}}的工件。有点像你可以更新或添加查询绑定到两个表的连接的表单。我不喜欢这种行为,因为对我来说,它何时能够胜利的规则是神秘的。当你移动到另一个数据库时,模式不再有效,你必须重写代码或留住人。