Функция SWITCH не работает в Access SQL

С кодом ниже, я пытаюсь обновить таблицу 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'

);

Что-то не так с моим запросом?

1 ответ

Решение

Каковы результаты этого?

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

Я думаю, что там есть значения, не упомянутые в вашем утверждении SWITCH? Они будут принудительно установлены в NULL, так как переключатель не дал результата.

Я бы просто добавил предложение 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')
;

Это будет означать, что вы обновляете только те строки, которые соответствуют вашим критериям, и оставляете все остальные строки в покое.

Другие вопросы по тегам