我试图从C#WinForms应用程序中创建一个SQLite数据库.我正在使用sqlite.org上的System.Data.SQLite库
我可以很好地创建数据库,我也可以创建表格.当我需要添加一个我不想允许空值的新列时,问题出现了,但我也不想指定默认值.
为了创建表,我将使用如下的查询:
CREATE TABLE MyTable (ID INTEGER PRIMARY KEY AUTOINCREMENT)
Run Code Online (Sandbox Code Playgroud)
当我运行此查询时,会发生此问题:
ALTER TABLE MyTable ADD COLUMN Col1 nvarchar NOT NULL
Run Code Online (Sandbox Code Playgroud)
这会产生以下错误:
SQL逻辑错误或缺少数据库无法添加具有默认值NULL的NOT NULL列
我理解为什么这可能是一个问题,如果表包含数据,但所有表都是空的(它们刚刚创建).
我还可以使用单独的工具(SQLiteStudio)手动将没有默认值的NOT NULL列添加到数据库.
那我为什么不能这样做呢?我的查询有问题吗?
虽然SQLite支持更改表,但它只支持一小部分命令.这意味着无法直接更改表以添加具有任何特定约束的列.
但是,如果在最初创建表时指定了它们,则可以指定所需的任何列约束.例如:
CREATE TABLE MyTable (
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Col1 nvarchar NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
这非常适合我需要做的事情.我很幸运,我的要求是在创建表后直接添加列,因此不需要太多的代码重写就可以将整个过程(创建表和列)合并到一个查询中.
如果要求是更改现有表并添加新列,那么它会更加棘手,但仍然可行.这里的解决方案是重命名当前表(作为临时),创建一个具有新列的新表(带有原始表名),然后将临时表中的数据复制到新表中,最后删除临时表表.
此处描述了"制作其他类型的表模式更改"部分中的过程.
| 归档时间: |
|
| 查看次数: |
3596 次 |
| 最近记录: |