Хотя верно то, что значение ALTER COLUMN отсутствует, если вы хотите только переименовать столбец, удалить ограничение NOT NULL или изменить тип данных, вы можете использовать следующий набор опасных команд:
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;
Вам нужно будет либо закрыть и снова открыть ваше соединение, либо выполнить очистку базы данных для перезагрузки изменений в схему.
Например:
Y:\> **sqlite3 booktest**
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> **create table BOOKS ( title TEXT NOT NULL, publication_date TEXT NOT
NULL);**
sqlite> **insert into BOOKS VALUES ("NULLTEST",null);**
Error: BOOKS.publication_date may not be NULL
sqlite> **PRAGMA writable_schema = 1;**
sqlite> **UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT
NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';**
sqlite> **PRAGMA writable_schema = 0;**
sqlite> **.q**
Y:\> **sqlite3 booktest**
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> **insert into BOOKS VALUES ("NULLTEST",null);**
sqlite> **.q**
Ссылки следующие:
pragma writable_schema
Когда эта прагма включена, таблицы SQLITE_MASTER, в которых база данных может быть изменена с помощью обычных UPDATE, INSERT,и УДАЛИТЬ заявления.Предупреждение: неправильное использование этой прагмы может легко привести к повреждению файла базы данных.
[alter table] (начиная с http://www.sqlite.org/lang_altertable.html)
SQLite поддерживает ограниченное подмножество ALTER TABLE. Команда ALTER TABLE в SQLite позволяетПользователь может переименовать таблицу или добавить новый столбец в существующую таблицу. Невозможно переименовать столбец, удалить столбец или добавить или удалить ограничения из таблицы.
