2012-03-02 7 views
4

私のプロジェクトでは、sqliteデータベースを使用していますが、残念ながら私の友人はエラーを起こしています。フィールドに正しい型がありません。 フィールド 'localid'(整数として宣言)のデータが2147483647より大きい場合、このフィールドのすべてのエントリは最大2147483647に設定されます。SQLite3:データ損失なしでfileds'typeを変更する方法

alter table/alter column sql requestはALTER TABLEの限定されたサブセットをサポートしているのでsqliteで動作します。名前を変更して新しい列を追加するだけです。

どうすればデータを失うことなく変更できますか?新しいデータベースを正しく作成し、すべてのデータをそれにコピーして古いものを削除しますか?

しかし、おそらくもっと良い方法がありますか?誰かがアイデアを持っていますか?

答えて

2

次のように実行します。

  1. は、主 キーとLOCALIDを形成するフィールドが含まれている一時テーブルを作成するには、(私はこれがあるにもPKと仮定します)。
  2. ドロップ古い列
  3. は一時テーブルから選択することにより、新しいカラム(+新タイプへの可能な変換を)埋める新しい列
  4. を追加
  5. 一時テーブルを埋めます。

カラムがそうであるように使用されている場合、可能な外部キーを忘れずに、変換を円滑にすると一時的に制約を緩和する可能性を覚えておいてください。

+0

ありがとう、私は今安全です。他の人のためかもしれません:このヒントに対するSQLリクエストの詳細もあります(http://stackoverflow.com/a/805508/791135) – FabianH

関連する問題