我有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());
我可以检查db调用sqlite changes()函数的更改次数。我知道sqlite中的case语句。但是,如何告诉sqlite当changes()返回0时无需进行选择?
答案 0 :(得分:0)
SQLite的SQL风格并没有T-SQL所具有的分支和循环结构。控制流逻辑以主语言运行。
在您的情况下,您需要sqlite3_changes功能。无论如何,您还是需要它来决定是否有任何要检索的行。虽然,作为一个简单和高效的问题,您也可以执行查询where changes() > 0
如果(我怀疑)查询规划器足够聪明,可以立即返回。