【问题标题】:SQLite: Insert Into Identity ColumnSQLite:插入身份列
【发布时间】: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 经验,我看不出为什么这不起作用。我会很感激帮助。谢谢

【问题讨论】:

标签: c# sql sqlite


【解决方案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 上找不到任何文档。
猜你喜欢
  • 1970-01-01
  • 2020-02-12
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 2018-02-01
  • 2017-03-20
相关资源
最近更新 更多