我可以在单个查询中执行多个操作,还是必须对我想要进行的每个更改进行查询?
我有一个列“Type”,它可以有字符串值“BOOL”,“WORD”或“DINT”
在一个查询中,我想:
是否可以在一个查询中执行此操作(如果是,如何?)
或者我必须做出这样的几个查询:
UPDATE DB_Total SET Type = 'DIGITAL'
WHERE Type='BOOL';
提前致谢!
答案 0 :(得分:2)
您可以使用嵌套的IIF
语句:
UPDATE DB_Total
SET Type = IIF(Type='BOOL','DIGITAL',
IIF(Type='WORD','UINT',
IIF(Type='DINT','LONG',Type)
)
)
WHERE Type IN ('BOOL', 'WORD', 'DINT');
(我通常会在一行中写下IIF部分,但我已经完成了换行,因此更容易阅读)
答案 1 :(得分:2)
将Switch()
视为嵌套IIf()
表达式的替代方法。
将此数据放在DB_Total
...
id Type
1 BOOL
2 abc
3 <-- Type is Null
4 WORD
5 DINT
...此查询更新DB_Total
,如下所示......
UPDATE DB_Total
SET [Type] = Switch(
[Type]='BOOL','DIGITAL',
[Type]='WORD','UINT',
[Type]='DINT','LONG'
)
WHERE [Type] IN ('BOOL', 'WORD', 'DINT');
DB_Total
之后:
id Type
1 DIGITAL
2 abc
3
4 UINT
5 LONG
但是,您可能会发现更方便的不同方法。创建一个replacements
表:
id old_type new_type
1 BOOL DIGITAL
2 WORD UINT
3 DINT LONG
然后,此UPDATE
语句将对DB_Total
版本产生与Switch()
相同的更改。
UPDATE DB_Total AS d
INNER JOIN replacements AS r
ON d.Type = r.old_type
SET d.Type = [r].[new_type];
将来,如果您需要更改或添加/删除单词替换对,则只需编辑replacements
表。然后,您不需要修改查询。