2011-01-08 25 views
5

¿Cómo puedo agregar una columna en una tabla SQLite si y solo si la misma columna no existe en la tabla?En sqlite Cómo agregar una columna en la tabla si la misma columna no existe en la tabla

Uso de ALTER TABLE ¿Puedo crear una nueva columna pero quiero saber cómo verificar si esa columna ya existe en la tabla o no?

+1

que puedas ver las columnas de tabla mediante el uso de 'nombreTabla .schema' – krakover

+1

@krakover ¿No es una respuesta? –

+0

@goreSplatter Dependiendo de lo que esté tratando de lograr. Expliqué cómo evitar el problema, no cómo resolverlo ... \ – krakover

Respuesta

0

Puede ver las columnas de tabla mediante el uso de 'nombreTabla .schema'

+2

¿Puedes dar un ejemplo de sql? – boiledwater

6

SQLite devuelve un error como 'no hay tal columna: foo' si la tabla no contiene la columna:

select foo from yourTable limit 1 

también se puede obtener la sentencia de creación de la tabla:

select sql from sqlite_master where tbl_name = 'YourTableName' 

y luego analizar el resultado, buscando el nombre-columna. No conozco una manera elegante de consultar la lista de columnas de una tabla específica, aunque puede existir una.

Además, si intenta hacer esto:

alter table YourTable add column foo {column-def whatever it is} 

obtiene un error de SQLite si la columna ya existe. También puedes atrapar ese error.

Finalmente usted puede hacer esto:

select sql from sqlite_master 
    where tbl_name = 'YOURTABLE' and sql like '%"foo" CHAR%'; -- or whatever type 

y si la tabla especificada contiene la columna que está rodeado por comillas dobles en la consulta, y con el tipo que ha especificado, obtendrá un resultado, de lo contrario, un conjunto vacío. Especificar el tipo de datos garantiza que su coincidencia de subcadenas LIKE ocurra en un nombre de columna.

4

No hay manera (que yo sepa) de hacerlo todo en una sola consulta SQLite. Debe usar el código de la aplicación para administrar If/Elseness.

Comprobar si existe la tabla o no:

select count(*) from sqlite_master where type = 'table' and name = MyTable'; 

Comprobar si existe la columna en la tabla o ahora

pragma table_info(thumbnail); 

Sin embargo, un mejor enfoque puede ser actualizaciones del esquema de base de datos explícitos sobre la base de versiones de esquema de su aplicación mantiene (por ejemplo, una declaración de tabla alternativa específica para pasar de la versión de esquema 1 a la 2):

pragma user_version; 
0

Parece que es imposible verificar si la columna no existe y añadir la nueva columna en un comando, porque Sqlite no admite "SI NO EXISTE" para la columna. "IF NOT EXISTS" funciona solo en la tabla. Aquí es lo que haré:

rev = ExecuteStatement("SELECT columnNamexx FROM tableNamexx limit 1;"); 

if(rev != SQLITE_OK){ // add col to table 
    ExecuteStatement("ALTER TABLE tableNamexx ADD COLUMN columnNamexx INTEGER DEFAULT 0;"); 
} 
Cuestiones relacionadas