Si bien es cierto que la hay ninguna columna ALTER, si sólo desea cambiar el nombre de la columna, quitar la restricción NOT NULL, o cambiar el tipo de datos, puede utilizar el siguiente conjunto de comandos peligrosas:
PRAGMA writable_schema = 1;
UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS (title TEXT NOT NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';
PRAGMA writable_schema = 0;
Deberá cerrar y volver a abrir su conexión o aspirar la base de datos para volver a cargar los cambios en el esquema.
Por ejemplo:
Y:>sqlite3 booktest
versión 3.7.4 SQLite
Enter ".help" para obtener instrucciones
Introduzca sentencias SQL terminados con un ";"
sqlite>crear tabla LIBROS (título TEXTO NO NULO, fecha_publicación TEXTO NO NULO);
sqlite>insertar en VALORES DE LIBROS ("NULLTEST", nulo);
Error: BOOKS.publication_date puede no ser NULL
sqlite>PRAGMA writable_schema = 1;
sqlite>ACTUALIZACIÓN SQLITE_MASTER SET SQL = 'CREAR LIBROS DE TABLA (título TEXTO NO NULO, fecha_ publicación TEXTO)' DONDE NOMBRE = 'LIBROS';
sqlite>PRAGMA writable_schema = 0;
sqlite>.q
Y:>sqlite3 booktest
versión 3.7.4 SQLite
Enter".ayuda" para obtener instrucciones
Introduzca sentencias SQL terminados con un ";"
sqlite>inserción en los libros VALORES ("NULLTEST", null);
sqlite>.q
Referencias siga:
pragma writable_schema
Cuando esto Pragma está activada, las tablas de datos en la que sqlite_master la base se puede cambiar usando las instrucciones ordinarias UPDATE, INSERT y DELETE. Advertencia: el mal uso de este pragma puede resultar fácilmente en un archivo de base de datos corrupto.
[alterar tabla] (De http://www.sqlite.org/lang_altertable.html)
SQLite soporta un subconjunto limitado de ALTER TABLE. El comando ALTER TABLE en SQLite le permite al usuario cambiar el nombre de una tabla o agregar una nueva columna a una tabla existente. No es posible cambiar el nombre de una columna, eliminar una columna o agregar o eliminar restricciones de una tabla.
Este método ha funcionado para mí, aunque para evitar situaciones en las que las columnas pueden estar en un orden diferente (es decir, de un comando ADD COLUMN anterior), utilicé: UPDATE SQLITE_MASTER SET SQL = replace (SQL, '[MyColumn] entero NOT NULL', '[MyColumn] entero NULL') WHERE NAME = 'MyTable'. Además, tenga cuidado de no ejecutar esto como parte de una transacción: puede evitar la ejecución de algunos de los comandos de transacción anteriores. – Ross