使用一个查询更新一列中的多个字段
Update multiple fields in one column using one query
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = '200'
WHERE AuditObjectType = '30' AND Module = '23'
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = '201'
WHERE AuditObjectType = '31' AND Module = '23'
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = '202'
WHERE AuditObjectType = '32' AND Module = '23'
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = '203'
WHERE AuditObjectType = '33' AND Module = '23'
我对 1 列有 4 个更新查询,但其中有多个字段,我想在一个查询中完成。
我认为用 case 会很好,但不知道如何用模块管理该列,在这种情况下什么是常量值,它是 23。
update [Audit].[mfw].[Audit]
set AuditObjectType = (case AuditObjectType
when '30' then '200'
when '31' then '201'
when '32' then '202'
when '33' then '203'
else AuditObjectType
end)
WHERE Module = '23'
您的查询看起来没问题,但我建议不要更新多余的行:
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = (case AuditObjectType
when '30' then '200'
when '31' then '201'
when '32' then '202'
when '33' then '203'
else AuditObjectType
end)
WHERE Module = '23' AND AuditObjectType IN ('30', '31', '32', '33');
也就是说,我发现 VALUES()
可以更简洁,更不容易出错:
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = v.AuditObjectType
FROM (VALUES ('23', '30', '200'),
('23', '31', '201'),
('23', '32', '202'),
('23', '33', '203')
) v(Module, AuditObjectType, AuditObjectType)
WHERE Audit.Module = v.Module AND Audit.AuditObjectType = v.AuditObjectType
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = '200'
WHERE AuditObjectType = '30' AND Module = '23'
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = '201'
WHERE AuditObjectType = '31' AND Module = '23'
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = '202'
WHERE AuditObjectType = '32' AND Module = '23'
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = '203'
WHERE AuditObjectType = '33' AND Module = '23'
我对 1 列有 4 个更新查询,但其中有多个字段,我想在一个查询中完成。 我认为用 case 会很好,但不知道如何用模块管理该列,在这种情况下什么是常量值,它是 23。
update [Audit].[mfw].[Audit]
set AuditObjectType = (case AuditObjectType
when '30' then '200'
when '31' then '201'
when '32' then '202'
when '33' then '203'
else AuditObjectType
end)
WHERE Module = '23'
您的查询看起来没问题,但我建议不要更新多余的行:
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = (case AuditObjectType
when '30' then '200'
when '31' then '201'
when '32' then '202'
when '33' then '203'
else AuditObjectType
end)
WHERE Module = '23' AND AuditObjectType IN ('30', '31', '32', '33');
也就是说,我发现 VALUES()
可以更简洁,更不容易出错:
UPDATE [Audit].[mfw].[Audit]
SET AuditObjectType = v.AuditObjectType
FROM (VALUES ('23', '30', '200'),
('23', '31', '201'),
('23', '32', '202'),
('23', '33', '203')
) v(Module, AuditObjectType, AuditObjectType)
WHERE Audit.Module = v.Module AND Audit.AuditObjectType = v.AuditObjectType