如何在 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 的插入查询中返回自动增量值?的主要内容,如果未能解决你的问题,请参考以下文章
在迁移中更改自动增量值(PostgreSQL 和 SQLite3)