SQLite:插入身份列
Posted
技术标签:
【中文标题】SQLite:插入身份列【英文标题】:SQLite: Insert Into Identity Column 【发布时间】:2012-09-28 22:38:06 【问题描述】:我是 SQLite 新手,我正在尝试运行以下代码:
using (var cn = new SQLiteConnection("Data Source=:memory:;Version=3;"))
cn.Open();
var cmd = cn.CreateCommand();
cmd.CommandText = "CREATE TABLE [ContentItems] ([Id] [int] IDENTITY(1,1) NOT NULL, [Title] [nvarchar](100) NOT NULL, CONSTRAINT [PK_ContentItems] PRIMARY KEY ([Id]))";
cmd.ExecuteNonQuery();
var cmd2 = cn.CreateCommand();
cmd2.CommandText = "INSERT INTO [ContentItems] (Title) VALUES ('Test 1')";
cmd2.ExecuteNonQuery();
但这给出了错误:
由于违反约束而中止 ContentItems.Id 可能不为 NULL
我查看了文档,但根据我过去的 SQL 经验,我看不出为什么这不起作用。我会很感激帮助。谢谢
【问题讨论】:
您忘记了自动递增位 在 SQLite 中通常不需要显式的自动递增 ID 列:sqlite.org/autoinc.html 【参考方案1】:SQLite 使用 AUTOINCREMENT 关键字创建您认为的 IDENTITY 列。在您的示例中,ID 列不是使用 AUTOINCREMENT 创建的,并且由于它被声明为 NOT NULL,因此您必须提供一个值。
您所追求的 CREATE 语句是:
CREATE TABLE [ContentItems] (
[Id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
[Title] TEXT NOT NULL,
CONSTRAINT [PK_ContentItems] PRIMARY KEY ([Id])
)
请注意,SQLite 使用 TEXT 数据类型(尽管它会将包含“CHAR”的任何内容映射到该数据类型)并且不需要或遵守最大字段长度。
【讨论】:
谢谢,这可以解释为什么我在 IDENTITY 上找不到任何文档。以上是关于SQLite:插入身份列的主要内容,如果未能解决你的问题,请参考以下文章