4

我是否可以在单个查询中执行多个操作,或者我是否必须对我想要进行的每项更改进行查询?

我有一个“类型”列,它可以包含字符串值“BOOL”、“WORD”或“DINT”

在一个查询中,我想:

  • 将所有“BOOL”更改为“DIGITAL”
  • 将所有“WORD”更改为“UINT”
  • 将所有“DINT”更改为“LONG”

是否可以在 1 个单一查询中执行此操作(如果是,如何?)

或者我必须做几个这样的查询:

UPDATE DB_Total SET Type = 'DIGITAL'
WHERE Type='BOOL';

提前致谢!

4

2 回答 2

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 部分全部写在一行上,但我已经做了换行符,这样更容易阅读)

于 2013-02-14T13:03:48.433 回答
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_TotalSwitch()

UPDATE DB_Total AS d
INNER JOIN replacements AS r
ON d.Type = r.old_type
SET d.Type = [r].[new_type];

将来,如果您需要更改或添加/删除成对的单词替换,您只需要编辑replacements表格。这样您就不需要修改查询了。

于 2013-02-14T17:24:26.273 回答