有没有办法启用在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“触发视图”的行为。
答案 0 :(得分:0)
此函数返回自打开数据库连接以来完成的所有INSERT,UPDATE或DELETE语句插入,修改或删除的总行数,包括作为触发器程序的一部分执行的行。
答案 1 :(得分:0)
它在sqlite3中是不可能的(2015年)。
基本上我在sqlite中使用返回功能(不支持)寻找而非触发视频(如问题所示)。
顺便说一句,postgresql(我相信其他一些完整的数据库服务器)可以做到这一点。