转换 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));
updates
和 joins
的语法有点不对。并且您需要使用 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
我有一个在 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));
updates
和 joins
的语法有点不对。并且您需要使用 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