如何在sql中一次更改多个表的结构

时间:2015-01-11 00:45:52

标签: sql

我的数据库中有多个表,名称不同,但都具有相同的结构。有没有办法可以更改结构以向每个表添加一列?

3 个答案:

答案 0 :(得分:1)

正如David Faber建议的那样,你只能在一个循环中完成这个任务。

我已经提供了下面的代码示例来完成此任务。

    private static final String ALTER_USER_TABLE_ColumnDetails = 
        " ADD NEW_COLUMN_NAME TEXT";

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
 // strTableList - Array of Table Names
       for(int i=0;i<strTableList.length;i++)
       {
       db.execSQL("ALTER TABLE "+strTableList[i]+ALTER_USER_TABLE_ColumnDetails);
       }
    }

希望这有一些帮助。

答案 1 :(得分:1)

SQL inhericance。

(至少在postgresql中工作) 如果所有表都继承了基表,则向基表添加列会将其添加到所有其他表。 (在获取数据库中每个表的锁之后)

如果您的DBM没有执行此类sql继承,那么我认为“不”:

获取表格列表并编写循环脚本,(或使用查找和替换)。

答案 2 :(得分:0)

如果您使用的是MS SQL,则可以直接在SQL中执行,例如:

EXEC sp_MSforeachtable '
if not exists (select * from sys.columns
            where object_id = object_id("?")
            and name = "NewColumnName")
 begin
     ALTER TABLE ? ADD NewColumnName varchar(50) NULL;
 end
 ';