0

使用下面的代码,我正在尝试更新 table K_tables。该列ColumnType中没有零值或空值,但在我运行此脚本后,我得到很多空值行,并且具有某些值(例如BIGINT)的行数大于预期。

 update K_tables set  ColumnType = Switch(
                ColumnType = 'I8' , 'BIGINT',
                ColumnType = 'I' , 'INTEGER',
                ColumnType = 'CF' , 'CHARACTER',
                ColumnType = 'D' , 'DECIMAL',
                ColumnType = 'I1' , 'BYTEINT',
                ColumnType = 'I2' , 'SMALLINT',
                ColumnType = 'DA' , 'DATE',
                ColumnType = 'TS' , 'TIMESTAMP',
                ColumnType = 'CV' , 'VARCHAR'

);

我的查询有问题吗?

4

1 回答 1

4

这样做的结果是什么?

SELECT ColumnType, COUNT(*) FROM K_tables GROUP BY ColumnType

我的猜测是您的 SWITCH 语句中没有提到其中的值?这些将被强制为 NULL,因为 SWITCH 没有给出任何结果。

我会简单地添加一个 WHERE 子句......

update
    K_tables
set
    ColumnType = Switch(
                     ColumnType = 'I8' , 'BIGINT',
                     ColumnType = 'I' , 'INTEGER',
                     ColumnType = 'CF' , 'CHARACTER',
                     ColumnType = 'D' , 'DECIMAL',
                     ColumnType = 'I1' , 'BYTEINT',
                     ColumnType = 'I2' , 'SMALLINT',
                     ColumnType = 'DA' , 'DATE',
                     ColumnType = 'TS' , 'TIMESTAMP',
                     ColumnType = 'CV' , 'VARCHAR'
                )
WHERE
    ColumnType IN ('I8','I', 'CF', 'D', 'I1', 'I2', 'DA', 'TS', 'CV')
;

这意味着您只更新符合您的条件的行,而保留所有其他行。

于 2015-08-19T15:30:33.110 回答