【问题标题】:How to return autoincrement value in insert query in SQLite?如何在 SQLite 的插入查询中返回自动增量值?
【发布时间】:2011-04-19 04:35:08
【问题描述】:

在我的项目中,我使用System.Data.SQLite。数据库有表Tags,其中包含自动增量主字段ID(类型Integer)。当我写:

using (SQLiteCommand command = conn.CreateCommand())
{
   command.CommandText = "insert into Tags(name) values(@name) returning into @id";
   command.Parameters.Add("@id", DbType.Int32).Direction = ParameterDirection.Output;
   command.ExecuteNonQuery();
}

Visual Studio 表示不支持该操作。如何解决?

在线发生错误:

command.Parameters.Add("@id", DbType.Int32).Direction = ParameterDirection.Output;

【问题讨论】:

  • 工作代码在哪里?我有同样的问题,但我发现“SELECT last_insert_rowid()”含糊不清。 @name 是如何设置的? “SELECT last_insert_rowid()”去哪儿了?旁白:您为 Calibre 添加了哪些功能? ;)
  • 我想,你不能设置@name。您的密钥必须具有名称“Id”。 "SELECT last_insert_rowid()" 与最后插入一起使用。

标签: c# sqlite auto-increment


【解决方案1】:

我建议使用存储过程。

IN SQL Server 有 @@IDENTITY 系统变量。它返回最后一个自增值

CREATE PROCEDURE SPGetLastAutoInc @name varchar, @lastAutoResult INT OUTPUT AS

INSERT INTO Tags(name) values(@name)


SET @lastAutoResult = @@IDENTITY

-- Return the number of all items ordered.
RETURN lastAutoResult 
GO

【讨论】:

  • 对不起。我不知道您使用的是 SQLite 。它适用于 SqlServer
【解决方案2】:

我找到了有效的查询:

SELECT last_insert_rowid()

【讨论】:

  • 它是如何工作的?我收到语法错误:INSERT STATEMENT INSERT INTO Orders (NAME) VALUES (@P0) SELECT last_insert_rowid()
【解决方案3】:

SQLite 3.35.0 及更新版本支持RETURNING 子句:

RETURNING 子句旨在为应用程序提供由 SQLite 自动填充的列的值。

代码可能如下所示:

INSERT INTO Tags(name) VALUES(@name) RETURNING ID;

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 2017-12-13
    • 2019-09-09
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2014-08-03
    • 2014-10-18
    • 1970-01-01
    相关资源
    最近更新 更多