SQLite修改字段类型
SQLite不支持直接修改字段类型,如需要修改字段类型,可按以下方法处理:
1、将要修改的字段名改名
2、用新的类型添加字段
3、复制原字段的内容
4、删除旧字段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | procedure SQLiteAlter(TableName,ColName,NewFileType:string);
var sql:string;
begin
sql:= 'ALTER TABLE ' +TableName+ ' RENAME COLUMN ' +chr(39)+ColName+chr(39)+ ' TO ' +chr(39)+ColName+ '_old' +chr(39);
UniSQL1.SQL.Text:=sql;
UniSQL1. Execute ;
sql:= 'ALTER TABLE ' +TableName+ ' ADD COLUMN ' +ColName+ ' ' + NewFileType;
UniSQL1.SQL.Text:=sql;
UniSQL1. Execute ;
sql:= 'UPDATE ' +TableName+ ' SET ' +ColName+ ' = CAST(' +ColName+ '_old AS ' +NewFileType+ ')' ;
UniSQL1.SQL.Text:=sql;
UniSQL1. Execute ;
sql:= 'ALTER TABLE ' +TableName+ ' DROP COLUMN ' +ColName+ '_old' ;
UniSQL1.SQL.Text:=sql;
UniSQL1. Execute ;
end ;
//Demo:
SQLiteAlter( 'blog_Content' , 'TestFieldName' , 'nvarchar(50)' );
|
补充:sqlite sql 修改字段类型
sqlite数据库中数据类型存在sqlite_master表中
1 | select sql from sqlite_master where tb_name= 'tbname'
|
把这条sql语句改了,表结构就改了。
sqlite的alter table限制很多,所以一般直接把原表改名。
复制一个表名与原表一样的,再把改名后的那个原表删了,以下sql语句可以用。
新表改完字段类型如果不兼容原表,新表中的该字段数据读不出。
所以要改类型可以不用声明字段类型
1 2 3 4 | alter table zb RENAME TO tempxxx_1;
create table zb(rkdh char (15) ,gbdh char (15) ,cph nchar (9) );
INSERT INTO zb(rkdh,gbdh,cph,) select rkdh,gbdh,cph FROM tempxxx_1;
drop table tempXXX_1
|