更新操作失败“操作必须使用可更新查询。(错误 3073)”
Posted
技术标签:
【中文标题】更新操作失败“操作必须使用可更新查询。(错误 3073)”【英文标题】:Update operation fails "Operation must use an updatable query. (Error 3073)" 【发布时间】:2018-10-06 20:20:13 【问题描述】:这是 SQL 代码,我就是不明白。
UPDATE
Roster_Master
INNER JOIN
DuesCOMP
ON
Roster_Master.Scout_ID = DuesCOMP.Scout_ID
SET Roster_Master.Dues = "Y"
WHERE
(
(
[Roster_Master]![Scout_ID]=[DuesCOMP]![Scout_ID]
)
)
;
这个想法是一个简单的表 Roster_Master,其中包含一个名为 Dues 的字段,它在每个财政年度开始时设置为“N”。当侦察员支付他们的会费时,这个标志需要设置为“Y”,表示侦察员已经支付了,并且司库不需要追捕他/她。
对我来说很明显这是一个 UPDATE 查询,它基于数据摘要查询 DuesCOMP。
我在这里做错了什么?
【问题讨论】:
这就是 DuesComp SQL 代码包含的内容。 SELECT [Account Transactions].Scout_ID, [Account Transactions].ID, Parameters.FiscalYR, Sum([Account Transactions].Transaction_Amount) AS SumOfTransaction_Amount FROM [Account Transactions], [Parameters] GROUP BY [Account Transactions].Scout_ID, [Account Transactions].ID, Parameters.FiscalYR HAVING ((([Account Transactions].ID)=9) AND ((Sum([Account Transactions].Transaction_Amount))=70)) ORDER BY [Account Transactions].Scout_ID;跨度> 亲爱的Dick,如果您在更新查询中使用“子查询”或“链接文本文件表”,您将面临这个问题。为避免这种情况,您的更新查询必须只包含表(或链接到 excel 或访问的表),因此您需要重写它。 请解释为此目的创建一个临时表,使用我的变量?帮助! 不要存储这些数据,只在需要的时候查询,除非你有性能问题。这将确保最新数据。当Account Transactions
被更新时,不仅是在你的更新查询被执行之后。
【参考方案1】:
您应该更新表的字段而不是子查询。
试试这个:
UPDATE
Roster_Master INNER JOIN [Account Transactions]
ON Roster_Master.Scout_ID = [Account Transactions].Scout_ID
SET
[Account Transactions].Dues = "Y"
WHERE
[Roster_Master].[Scout_ID]=[Account Transactions].[Scout_ID]
AND
[Account Transactions].ID=9
AND
Sum([Account Transactions].Transaction_Amount)=70
;
【讨论】:
这是我输入的内容:UPDATE Roster_Master INNER JOIN [Account Transactions] ON Roster_Master.Scout_ID = [Account Transactions].Scout_ID SET [Account Transactions].Dues = "Y" WHERE [Roster_Master ].[Scout_ID]=[Account Transactions].[Scout_ID] AND [Account Transactions].ID=9 AND Sum([Account Transactions].Transaction_Amount)=70 它失败了:不能在 Where 子句中具有聚合函数 ([Roster_Master].[Scouts_ID]=[Account Trasactions].[Scout_ID] And [Account Trasactions].id=9 And Sum ([Account Trasactions].[Trasaction_Amount)=70。 有什么想法吗? 对 2 个最新条件使用有声明。 嗨,Hamed,这正是我在 SQL 语句中键入的内容:UPDATE Roster_Master INNER JOIN [Account Transactions] ON Roster_Master.Scout_ID = [Account Transactions].Scout_ID SET [Account Transactions] .Dues = "Y" WHERE [Roster_Master].[Scout_ID]=[Account Transactions].[Scout_ID] HAVING [Account Transactions].ID=9 AND Sum([Account Transactions].Transaction_Amount)=70;我做对了吗?我在 SQL 语句末尾收到错误“缺少分号 (;)。(错误 3137)”任何想法,非常感谢您的帮助! 这将起作用: UPDATE Roster_Master INNER JOIN [Account Transactions] ON Roster_Master.Scout_ID = [Account Transactions].Scout_ID SET Roster_Master.Dues = "Y" where Roster_Master.Scout_ID = ([Account Transactions]. [Scout_ID]) AND [Account Transactions].ID IN ( Select ID From [Account Transactions] Group By ID With Sum([Account Transactions].Transaction_Amount)=70 AND [Account Transactions].ID=9 ) ;以上是关于更新操作失败“操作必须使用可更新查询。(错误 3073)”的主要内容,如果未能解决你的问题,请参考以下文章