2014-09-12 82 views
0

该项目的目标是将所有Access表迁移到SQL,但继续对象(如报表,查询,表单和宏),直到我们迁移到.NET框架。将Access表迁移到SQL。更新查询不起作用

它似乎工作的大部分,但不是一些更新查询。

这个特定的更新查询具有UPDATE语句,后面跟着一个像这样的连接语句。

UPDATE (tblBid INNER JOIN Plan ON tblBid.Id = Plan.BidId) 
SET .... 

错误信息读取,“操作必须是一个可更新的查询”,在T-SQL

我知道,表要更新如下UPDATE,不能连接语句。那么,如何修复Access更新查询以使它们与SQL兼容?很明显,SQL不喜欢Access更新查询。

编辑:

我把下面劳伦斯的建议和更新SQL视图(抱歉,我不能简化它。)查询。

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 [Description]中得到了“语法错误缺失操作符”。因此,现在Access对于SQL很满意的表达式感到不满。

+1

现实情况是T-SQL和VBA是**不相同的。您很可能需要开发2个独立的SQL语句;一个用于Access,一个用于SQL Server。 – 2014-09-13 15:12:57

回答

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

所以我必须SQL视图来编辑这个东西?亲爱的Gawd。 – user79284 2014-09-12 22:16:38

+0

这也可能需要传递查询。 – Laurence 2014-09-12 22:31:00

+0

请参阅我的附录。我根据你的建议修复了它,现在Access并不开心。它在SQL中工作。 – user79284 2014-09-12 22:33:31

0

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

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

在MS Access:

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

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