转换 IIF 语句从访问到 T-SQL SQL Server(Pass-Through)

Convert IIF statement from access to T-SQL SQL Server(Pass-Through)

我有一个在 Access 2013 中创建的更新查询。我有一个 table 超过 150 万条记录,我正在尝试 运行 一个更新查询,但有时需要很长时间,尤其是如果我要更新数千行。所以我发现我会在访问中使用直通选项,但是当我尝试这样做时,我在查询中遇到语法错误,因为访问中的语法与 SQL 服务器中的语法不同。我怎样才能将查询转换为 sql 服务器,这样我的查询就不会永远占用 运行.

这是我的原始访问查询,我想将其转换为 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));

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