sql-server - Sqlite 中的 TSQL "IF @@Rowcount > 0"模拟?

标签 sql-server tsql sqlite

我有 t-sql 插入查询到表 [foo] (bar_id int 主键自动增量,bar_name varchar) 和文本:

INSERT INTO foo(bar_name)
VALUES (@bar_name_new);
IF @@ROWCOUNT > 0
    SELECT bar_id, bar_name
    FROM foo
    WHERE bar_id = scope_identity();

触发器可以在插入后修改 bar_name 字段。这就是为什么我需要刷新“bar_name”字段。
现在我需要在 sqlite db 上做同样的事情。我写过这个:
INSERT INTO foo(bar_name)
VALUES (@bar_name_new);

 SELECT bar_id, bar_name
 FROM foo
 WHERE bar_id = (SELECT last_insert_rowid());

我可以检查数据库中调用 sqlite changes() 函数的更改次数。我知道sqlite中的case语句。但是我怎么能告诉sqlite当changes()返回0时不需要做select?

最佳答案

SQLite 的 SQL 风格没有 T-SQL 具有的分支和循环结构。控制流逻辑在宿主语言中执行。

在您的情况下,您需要 sqlite3_changes功能。无论如何,您将需要它来决定是否要检索任何行。虽然,为了方便和效率,您不妨只执行查询 where changes() > 0如果(我怀疑)查询计划器足够聪明,可以立即返回。

关于sql-server - Sqlite 中的 TSQL "IF @@Rowcount > 0"模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10671931/

相关文章:

python - SQLite 插入语句使用 Flask 静默失败

java - 如何在从 cordova 创建的 native 代码中使用相同的 android SQLite DB?

php - 拉拉维尔 : Integrity constraint violation

使用 PDO_DBLIB 连接到 MS SQL 数据库的 PHP 错误

sql-server - SQL Server Profiler - 监视对象的权限被拒绝?

SQL 服务器 2012 :Generate column values Dynamically based on concatenation of other column values

sql - 每个组的第二个最大值 - SQL

sql-server - SSIS 包在 Visual Studio 中运行良好,但在部署的机器上手动运行时失败

mysql - 基于时间在数据库中生成事件

tsql - Windows 函数内部除以 0 错误