首页 文章

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

提问于
浏览
0

该项目的目标是将所有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

    如果您只更新其中一个表,则可以在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
        );
    
  • 0

    我记得,T-SQL和Access具有不同的UPDATE语法 . 在T-SQL中:

    update Table
    set Column = ...
    from ...
    

    在MS Access中:

    update Table
    from ...
    set Column = ...
    

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

相关问题