我有一个表的列名称,数量,率。我需要在名称和qty列之间添加一个新列COLNew。如何在两列之间添加新列?
当前回答
我很少给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)
但它将被添加在末尾,而不是在现有列之间。
我很少给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都是一个字符串。以防有人尝试了公认的答案!
在SQL中,您不需要在其他列之间添加列,而只是添加它们。它们放在哪里完全取决于DBMS。确保列以正确顺序出现的正确位置是在选择它们时。
换句话说,如果你想让它们按照{name,colnew,qty,rate}的顺序排列,你可以使用:
select name, colnew, qty, rate from ...
使用SQLite,你需要使用alter表,一个例子是:
alter table mytable add column colnew char(50)
我也遇到了同样的问题,正如评论中所指出的,在接受的答案中提出的第二种方法在处理外键时可能会有问题。
我的解决方法是将数据库导出到一个sql文件,确保INSERT语句包含列名。我使用DB浏览器的SQLite,它有一个方便的功能。在此之后,您只需编辑create table语句,并在需要的位置插入新列并重新创建db。
在*nix中,like系统只是沿着
cat db.sql | sqlite3 database.db
我不知道这在非常大的数据库中是否可行,但在我的案例中是可行的。
你有两个选择。 首先,你可以简单地添加一个新列,如下所示:
ALTER TABLE {tableName} ADD COLUMN COLNew {type};
第二,更复杂,但实际上会把列放在你想要的地方,将创建一个新表,包含缺失的列和一个临时的新名称:
CREATE TABLE {tempNewTableName} (name TEXT, COLNew {type} DEFAULT {defaultValue}, qty INTEGER, rate REAL);
然后用旧数据填充它
INSERT INTO {tempNewTableName} (name, qty, rate) SELECT name, qty, rate FROM OldTable;
然后删除旧表:
DROP TABLE OldTable;
然后将新表重命名为OldTable:
ALTER TABLE {tempNewTableName} RENAME TO OldTable;
我更喜欢第二种选择,因为它将允许您在需要时完全重命名所有内容。
推荐文章
- 如何转储一些SQLite3表的数据?
- Mac SQLite编辑器
- SQLite:如何将查询结果保存为CSV文件?
- SQLite中“如果不存在,请插入”语句
- 转义单引号字符用于SQLite查询
- 如何创建默认值“现在”的时间戳列?
- 如何检索插入id后插入行在SQLite使用Python?
- 创建存储过程和SQLite?
- SQLite并发访问
- 如何连接字符串与填充在sqlite
- 在Android SQLite中处理日期的最佳方法
- SQLite数据库文件使用什么扩展名重要吗?
- 无法加载DLL 'SQLite.Interop.dll'
- 快速简单的方法迁移SQLite3到MySQL?
- 在Ubuntu上安装sqlite3-ruby错误