将Access表迁移到SQL。更新查询不起作用

时间:2014-09-12 22:01:59

标签: sql sql-server ms-access

该项目的目标是将所有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很满意的表达式不满意。

2 个答案:

答案 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 = ...

除非您在应用程序中动态生成查询,否则没有统一的方法。