SQLite:如何启用从触发器修改的行数

时间:2015-03-15 19:08:13

标签: view triggers sqlite

有没有办法启用在SQLite中触发修改的行的计数?

我知道它已被禁用https://www.sqlite.org/c3ref/changes.html,我理解为什么,但我可以以某种方式启用它吗?

CREATE TABLE Users_data (
    Id INTEGER PRIMARY KEY AUTOINCREMENT,
    Deleted BOOLEAN DEFAULT (0),
    Name STRING
);

CREATE VIEW Users AS 
    SELECT Id, Name 
    FROM Users_data 
    WHERE Deleted = 0;

CREATE TRIGGER UsersDelete2UsersData 
INSTEAD OF DELETE
ON Users 
FOR EACH ROW
BEGIN
    UPDATE Users_data SET Deleted = 1 WHERE Id = OLD.Id; 
END;

-- etc for insert & update

然后delete from Users where Name like 'foo' /* doesnt even need 'Id = 1' */;工作正常,但正如文档所述,修改行的数量始终为零。

(我无法修改我的DAL以自动添加“Where Deleted = 0”,因此备份计划是在Users表上有“Users_deleted”和“on delete”触发器而没有任何视图,但是我必须继续跟踪FK(对于例如,当有人从FK表中删除时该怎么办)等等......)

编辑:返回的号码用于检查数据库并发。

Edit2:更清楚:正如我所说,我无法修改我的DAL(实体框架6),因此首选答案应该遵循以下伪代码:int affectedRow = query("delete from Users where Name like 'foo';").Execute(); 它完全是关于SQLite“触发视图”的行为。

2 个答案:

答案 0 :(得分:0)

改为使用sqlite3_total_changes()

  

此函数返回自打开数据库连接以来完成的所有INSERT,UPDATE或DELETE语句插入,修改或删除的总行数,包括作为触发器程序的一部分执行的行。

答案 1 :(得分:0)

它在sqlite3中是不可能的(2015年)。

基本上我在sqlite中使用返回功能不支持)寻找而非触发视频(如问题所示)。

顺便说一句,postgresql(我相信其他一些完整的数据库服务器)可以做到这一点。