如何在 SQLite 的插入查询中返回自动增量值?

Posted

技术标签:

【中文标题】如何在 SQLite 的插入查询中返回自动增量值?【英文标题】:How to return autoincrement value in insert query in 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()" 与最后插入一起使用。 【参考方案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;

【讨论】:

以上是关于如何在 SQLite 的插入查询中返回自动增量值?的主要内容,如果未能解决你的问题,请参考以下文章

在插入中立即使用自动增量值

C#获取mysql自动增量值[重复]

在迁移中更改自动增量值(PostgreSQL 和 SQLite3)

如何检索 MS-Access 中的最后一个自动增量值,例如 Sql Server 中的 @@Identity

如何通过 SQL 插入增量值

在 MySQL 中,如何在 INSERT 时使用另一列中的自动增量值?