我有一个表的列名称,数量,率。我需要在名称和qty列之间添加一个新列COLNew。如何在两列之间添加新列?


当前回答

在SQL中,您不需要在其他列之间添加列,而只是添加它们。它们放在哪里完全取决于DBMS。确保列以正确顺序出现的正确位置是在选择它们时。

换句话说,如果你想让它们按照{name,colnew,qty,rate}的顺序排列,你可以使用:

select name, colnew, qty, rate from ...

使用SQLite,你需要使用alter表,一个例子是:

alter table mytable add column colnew char(50)

其他回答

我很少给11岁的老问题加答案。也就是说,有很多选票的答案有一行误导性的代码。我说误导是因为我尝试过,但没有成功。下面是我引用的代码行。

ALTER TABLE {tableName} RENAME TO TempOldTable

这是我在第一次尝试向已经创建的DB表添加列时尝试的行。它失败了,但为什么可能是一个更好的问题。不管怎么说,这都是失败的代码行。

   Dim tb As String = "IncomeTable"
   Dim sqlCmd As String = "$ALTER TABLE" '{tb}' "ADD COLUMN itNumVisit INTEGER"

下面是最后的代码,它添加了一个新的Column,在我的例子中是INTEGER类型。

    Private Sub btnCopyTable_Click(sender As Object, e As EventArgs) Handles btnCopyTable.Click

    Dim sqlCmd As String = "ALTER TABLE IncomeTable ADD COLUMN itNumVisit INTEGER"
    Try
        Using conn As New SQLiteConnection($"Data Source = '{gv_dbName}';Version=3;")
            conn.Open()

            Using cmd As New SQLiteCommand(sqlCmd, conn)

                cmd.ExecuteNonQuery()
            End Using
        End Using

    Catch ex As Exception
        MsgBox("It Failed")
    End Try
End Sub

注意STRING sqlCmd都是一个字符串。以防有人尝试了公认的答案!

您可以使用查询添加新列

ALTER TABLE TableName ADD COLUMN COLNew CHAR(25)

但它将被添加在末尾,而不是在现有列之间。

在SQL中,您不需要在其他列之间添加列,而只是添加它们。它们放在哪里完全取决于DBMS。确保列以正确顺序出现的正确位置是在选择它们时。

换句话说,如果你想让它们按照{name,colnew,qty,rate}的顺序排列,你可以使用:

select name, colnew, qty, rate from ...

使用SQLite,你需要使用alter表,一个例子是:

alter table mytable add column colnew char(50)
ALTER TABLE {tableName} ADD COLUMN COLNew {type};
UPDATE {tableName} SET COLNew = {base on {type} pass value here};

此更新需要处理空值,并根据需要输入默认值。在你的例子中,你需要调用SELECT查询,你会得到列的顺序,正如paxdiablo已经说过的:

SELECT name, colnew, qty, rate FROM{tablename}

在我看来,你的列名从游标中获取值:

private static final String ColNew="ColNew";
String val=cursor.getString(cursor.getColumnIndex(ColNew));

因此,如果索引发生变化,应用程序也不会遇到任何问题。

这是一种安全的方法,否则,如果您正在使用CREATE temptable或RENAME table或CREATE,如果不仔细处理,就会有很高的数据丢失几率,例如在电池即将耗尽时发生事务的情况下。

我也遇到了同样的问题,正如评论中所指出的,在接受的答案中提出的第二种方法在处理外键时可能会有问题。

我的解决方法是将数据库导出到一个sql文件,确保INSERT语句包含列名。我使用DB浏览器的SQLite,它有一个方便的功能。在此之后,您只需编辑create table语句,并在需要的位置插入新列并重新创建db。

在*nix中,like系统只是沿着

cat db.sql | sqlite3 database.db

我不知道这在非常大的数据库中是否可行,但在我的案例中是可行的。