0

以下のコードで、 table を更新しようとしていますK_tables。列ColumnTypeにはゼロまたは null 値はありませんが、このスクリプトを実行した後、null 値の行が多数取得され、特定の値 ( など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 ステートメントに記載されていない値がそこにあると思いますか? 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')
;

これは、基準に適合する行のみを更新し、他のすべての行をそのままにしておくことを意味します。

于 2015-08-19T15:30:33.110 に答える