该项目的目标是将所有Access表迁移到SQL,但在我们迁移到.NET框架之前,继续使用报表,查询,表单和宏等对象。
它似乎在很大程度上起作用,但不是一些更新查询。
此特定更新查询具有UPDATE语句,后跟类似的连接语句。
UPDATE (tblBid INNER JOIN Plan ON tblBid.Id = Plan.BidId)
SET ....
错误消息显示“操作必须是可更新的查询”
我知道在T-SQL中,要更新的表遵循UPDATE,而不是join语句。那么如何修复Access更新查询以使它们与SQL兼容?显然,SQL不喜欢Access更新查询。
编辑:
我在下面提到了Laurence的建议,并在SQL View中更新了查询(抱歉。我无法简化它)。
UPDATE [Plan Assemblies]
SET [Plan Assemblies].[Description] = ItemTemp.[Description]
FROM ([Bid Header] INNER JOIN [Plan]
ON [Bid Header].BidID = [Plan].BidID) INNER JOIN (ItemTemp INNER JOIN [Plan Assemblies]
ON ItemTemp.ID = [Plan Assemblies].AssyID) ON [Plan].PlanID = [Plan Assemblies].PlanID
WHERE [Bid Header].BidID = 1
查询在SQL中执行。在Access中,当我尝试将其保存在SQLView中时,我在查询表达式ItemTemp中获得了“语法错误缺失运算符。[描述]。所以现在Access对SQL很满意的表达式不满意。
答案 0 :(得分:0)
如果您只更新其中一个表,则可以在T-SQL中重写查询
update
b
set
...
from
tblBid b
inner join
Plan p
on b.Id = p BidID
如果要更新两者,可以将其转换为事务中的两个更新语句。
您也可以用这种方式重写它,它可能是有效的T-SQL和Jet SQL:
update
tblBid
set
...
where
exists (
select
'x'
from
Plan p
where
p.BidID = tblBid.Id
);
答案 1 :(得分:0)
我记得,T-SQL和Access具有不同的UPDATE语法。在T-SQL中:
update Table
set Column = ...
from ...
在MS Access中:
update Table
from ...
set Column = ...
除非您在应用程序中动态生成查询,否则没有统一的方法。