开关功能不可用';不能在access sql中工作

开关功能不可用';不能在access sql中工作,sql,ms-access-2010,ansi-sql,ansi-sql-92,Sql,Ms Access 2010,Ansi Sql,Ansi Sql 92,使用下面的代码,我正在尝试更新tableK_tables。列ColumnType中没有零值或空值,但是在我运行这个脚本之后,我得到了很多空值行,并且具有特定值(例如BIGINT)的行数比预期的要多 update K_tables set ColumnType = Switch( ColumnType = 'I8' , 'BIGINT', ColumnType = 'I' , 'INTEGER',

使用下面的代码,我正在尝试更新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'

);

我的问题有问题吗

结果如何

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')
;

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

结果如何

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')
;

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

我还将在第一个
选择-分组依据中包含
计数(*)
,因为OP说出现的
BIGINT
的数量大于预期。我不知道为什么,但是添加
where in
行使查询按预期工作。我还将在第一个
select-groupby
行中添加
count(*)
,因为OP说出现的
BIGINT
比预期的多。我不知道为什么,但添加
where in
行使查询按预期工作。