2014-09-12 74 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 = ... 

除非你在應用程序中動態生成的查詢,也沒有統一的方法。