插件窝 干货文章 SQLite如何修改字段类型

SQLite如何修改字段类型

字段 sql 类型 SQLite 539    来源:    2024-10-28

SQLite不支持直接修改字段类型,如需要修改字段类型,可按以下方法处理:
1、将要修改的字段名改名
2、用新的类型添加字段
3、复制原字段的内容
4、删除旧字段

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表中

select sql from sqlite_master where tb_name='tbname'

把这条sql语句改了,表结构就改了。
sqlite的alter table限制很多,所以一般直接把原表改名。
复制一个表名与原表一样的,再把改名后的那个原表删了,以下sql语句可以用。
新表改完字段类型如果不兼容原表,新表中的该字段数据读不出。
所以要改类型可以不用声明字段类型

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

到此这篇关于SQLite修改字段类型的方法的文章就介绍到这了,更多相关SQLite修改字段类型的方法内容请搜索插件窝以前的文章或继续浏览下面的相关文章希望大家以后多多支持插件窝!