SQLite中的TSQL“IF @@ Rowcount> 0”模拟?

时间:2012-05-20 08:27:09

标签: 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());

我可以检查db调用sqlite changes()函数的更改次数。我知道sqlite中的case语句。但是,如何告诉sqlite当changes()返回0时无需进行选择?

1 个答案:

答案 0 :(得分:0)

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

在您的情况下,您需要sqlite3_changes功能。无论如何,您还是需要它来决定是否有任何要检索的行。虽然,作为一个简单和高效的问题,您也可以执行查询where changes() > 0如果(我怀疑)查询规划器足够聪明,可以立即返回。