6

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

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() 函数的 db 中的更改数量。而且我知道sqlite中的case语句。但是我如何告诉 sqlite 当 changes() 返回 0 时不需要选择呢?

4

1 回答 1

2

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

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

于 2016-04-28T02:04:02.933 回答