2015-12-20 96 views
0

我有一個更新查詢,我在Access 2013中創建了它。我有一個包含超過150萬條記錄的表,我嘗試運行更新查詢但它有時需要永久​​,特別是如果我正在更新數千行。所以我想通了,我會在訪問中使用傳遞選項,但是當我嘗試這樣做時,我的查詢中出現語法錯誤,因爲訪問語法與SQL Server中的語法不同。我怎麼能將我的查詢轉換爲sql服務器,所以我的查詢不會永遠運行。將IIF語句從訪問轉換爲T-SQL SQL Server(傳遞)

這是我最初的訪問查詢,我想將其轉換爲T-SQL。

UPDATE CLAIM 
    INNER JOIN 06 ON [06].ID = Claim.ID 
    SET reason_code_01= IIF(reason_code_01 is null,」06」,reason_code_01),  reason_code_02= IIF(reason_code_01 <> null,」06」,reason_code_02), reason_code_03=  IIF(reason_code_01 <> null,」06」,reason_code_03), reason_code_04=  IIF(reason_code_01 <> null,」06」,reason_code_04),overpaid_deduc=  IIF(overpaid_deduc is null,[06].[DED AMT],overpaid_deduc), overpaid_deduc2=  IIF(overpaid_deduc <>null,[06].[DED AMT],overpaid_deduc2),overpaid_deduc3=  IIF(overpaid_deduc <> null,[06].[DED AMT],overpaid_deduc3),overpaid_pay1=  IIF(overpaid_pay1 is null,[06].[PAY 1],overpaid_pay1),overpaid_pay2=  IIF(overpaid_pay1 <> null,[06].[PAY 1],overpaid_pay2),overpaid_pay3=  IIF(overpaid_pay1 <> null,[06].[PAY 1],overpaid_pay3) 
WHERE ((([06].sort_order)=1)); 

回答

3

你的語法是斷位的updatesjoins。而且您需要使用case聲明而不是iif。這裏是一個濃縮版,這應有助於:

UPDATE c 
SET reason_code_01= 
    case when reason_code_01 is null 
     then '06' 
     else reason_code_01 
    end, 
    ... 
    overpaid_pay3= 
    case when overpaid_pay1 is not null 
     then [06].[PAY 1] 
     else overpaid_pay3 
    end 
FROM CLAIM c 
    INNER JOIN 06 ON [06].ID = c.ID 
WHERE [06].sort_order=1 
+0

我相信這是正確的代碼,因爲我拿過去所有的語法錯誤,但我得到與ReturnRecords屬性設置爲true的傳遞查詢不返回任何記錄錯誤 – SikRikDaRula

+1

@SikRikDaRula:這是正常的和正確的 - UPDATE查詢不會返回記錄,所以您必須將查詢的'ReturnRecords'屬性設置爲False。 – Andre