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

SQLite: how to enable counting number of rows modified from trigger

有什么方法可以对在 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

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

(我无法修改我的 DAL 以自动添加 "where Deleted = 0",因此备份计划是让 table Users_deleted 和 'on delete' 触发用户 table没有任何视图,但我必须继续跟踪 FK(例如,当有人从 FK 中删除时要做什么 table)等等...)

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

Edit2: 更清楚一点:正如我所说,我无法修改我的 DAL (Entity Framework 6),因此首选答案应该按照以下伪操作代码:int affectedRow = query("delete from Users where Name like 'foo';").Execute(); 一切都与 SQLite "trigger on view" 行为有关。

改用sqlite3_total_changes()

This function returns the total number of rows inserted, modified or deleted by all INSERT, UPDATE or DELETE statements completed since the database connection was opened, including those executed as part of trigger programs.

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

基本上我一直在寻找而不是在视图上触发(如有问题)return函数,sqlite 不支持

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