solicita una sintaxis ALTER COLUMN, pero no dice lo que quiere hacer. Eso me hace pensar que esto es demasiado amplio. ALTER COLUMN podría hacer mucho, ¿está buscando eliminar la restricción no nula como en el ejemplo de pg?
Evan Carroll
si utiliza las herramientas de intellj db, cuando cambie la columna generará los comandos para su sqlite.
foolcage
Respuestas:
111
No hay ALTER COLUMN en sqlite.
Creo que tu única opción es:
Cambiar el nombre de la tabla a un nombre temporal
Cree una nueva tabla sin la restricción NOT NULL
Copie el contenido de la tabla anterior a la nueva
Si bien es cierto que no es ALTER COLUMN, si solo desea cambiar el nombre de la columna, eliminar la restricción NOT NULL o cambiar el tipo de datos, puede usar el siguiente conjunto de comandos peligrosos:
PRAGMA writable_schema = 1;
UPDATE SQLITE_MASTER SETSQL = 'CREATE TABLE BOOKS ( title TEXT NOT NULL, publication_date TEXT)'WHERENAME = 'BOOKS';
PRAGMA writable_schema = 0;
Deberá cerrar y volver a abrir su conexión o vaciar la base de datos para volver a cargar los cambios en el esquema.
Por ejemplo:
Y:\> **sqlite3 booktest**
SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> **createtable BOOKS ( title TEXTNOTNULL, publication_date TEXTNOTNULL);**
sqlite> **insertinto BOOKS VALUES ("NULLTEST",null);**
Error: BOOKS.publication_date may not be NULL
sqlite> **PRAGMA writable_schema = 1;**
sqlite> **UPDATE SQLITE_MASTER SETSQL = 'CREATE TABLE BOOKS ( title TEXT NOT
NULL, publication_date TEXT)'WHERENAME = '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> **insertinto BOOKS VALUES ("NULLTEST",null);**
sqlite> **.q**
LAS REFERENCIAS SIGUEN:
pragma writable_schema
Cuando este pragma está activado, las tablas SQLITE_MASTER en las que la base de datos se puede cambiar usando las sentencias UPDATE, INSERT y DELETE ordinarias. 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 admite un subconjunto limitado de ALTER TABLE. El comando ALTER TABLE en SQLite 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 funcionó para mí, aunque para evitar situaciones en las que las columnas podrían estar en un orden diferente (es decir, desde un comando ADD COLUMN anterior), utilicé: UPDATE SQLITE_MASTER SET SQL = replace (SQL, '[MyColumn] integer NOT NULL' , '[MyColumn] integer NULL') DONDE NOMBRE = 'MyTable'. Además, tenga cuidado de no ejecutar esto como parte de una transacción, ya que puede evitar que se ejecuten algunos de los comandos de transacciones anteriores.
Ross
32
SQLite admite un subconjunto limitado de ALTER TABLE. El comando ALTER TABLE en SQLite 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. Pero puede modificar el tipo de datos de la columna de la tabla u otra propiedad mediante los siguientes pasos.
Respuestas:
No hay ALTER COLUMN en sqlite.
Creo que tu única opción es:
Esta otra respuesta de Stackoverflow explica el proceso en detalles
fuente
Si bien es cierto que no es ALTER COLUMN, si solo desea cambiar el nombre de la columna, eliminar la restricción NOT NULL o cambiar el tipo de datos, puede usar el siguiente conjunto de comandos peligrosos:
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 vaciar la base de datos para volver a cargar los cambios en el esquema.
Por ejemplo:
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**
LAS REFERENCIAS SIGUEN:
pragma writable_schema
Cuando este pragma está activado, las tablas SQLITE_MASTER en las que la base de datos se puede cambiar usando las sentencias UPDATE, INSERT y DELETE ordinarias. 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 admite un subconjunto limitado de ALTER TABLE. El comando ALTER TABLE en SQLite 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.
fuente
SQLite admite un subconjunto limitado de ALTER TABLE. El comando ALTER TABLE en SQLite 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. Pero puede modificar el tipo de datos de la columna de la tabla u otra propiedad mediante los siguientes pasos.
Para más detalles puede consultar el enlace .
fuente