Синтаксис триггера выглядит нормально и работает (см. Ниже), хотя логика удаления всех строк, дата создания которых превышает 10 дней назад, может привести к удалению вставленной строки, если только дата создания этой строки не равна 10 дням или больше в прошлом.
Чтобы сработал триггер, значение, хранящееся в столбце CreatedDate
, должно быть в приемлемом формате даты, т. Е. Гггг-мм-гг (например, 2018-09-11).
Рассмотрим следующее (тестовая версия вашего SQL с данными): -
DROP TABLE IF EXISTS NewsAnnouncement;
DROP TRIGGER IF EXISTS Trigr_NewsAnnouncementDelete;
CREATE TABLE IF NOT EXISTS `NewsAnnouncement` (`Id` TEXT NOT NULL, `Title` TEXT, `Image` TEXT, `Description` TEXT, `PublishDate` TEXT, `CreatedDate` TEXT, `UserName` TEXT, `ShortDescription` TEXT, PRIMARY KEY(`Id`));
SELECT * FROM NewsAnnouncement;
Create Trigger IF NOT EXISTS Trigr_NewsAnnouncementDelete
AFTER Insert On NewsAnnouncement
Begin Delete From NewsAnnouncement
WHERE DATE(CreatedDate) > DATE('now','-10 days');
END
;
SELECT * FROM sqlite_master WHERE type = 'trigger';
INSERT INTO NewsAnnouncement VALUES
('test001','title001','image001','desc001','2018-01-01','2018-01-01','fred','shordesc001'),
('test002','title002','image002','desc002','2018-10-01','2018-10-01','fred','shordesc002'),
('test003','title003','image003','desc003','2018-12-01','2018-12-01','fred','shordesc003'),
('test004','title004','image004','desc004','2018-08-01','2018-08-01','fred','shordesc004'),
('test005','title005','image005','desc005','2018-12-01','2018-12-01','fred','shordesc005'),
('test006','title006','image006','desc006','2018/08/01','2018/08/01','fred','shordesc006'),
('test007','title007','image007','desc007','2018/12/01','2018/12/01','fred','shordesc007')
;
SELECT *,date(CreatedDate) FROM NewsAnnouncement;
Результат будет: -
То есть: -
- Вставка строки test001 через триггер ничего не делает, так как CreatedDate старше 10 дней.
- Вставка строки test002 приводит к удалению строки триггером, так как ее CreatedDate меньше 10 дней.
- Вставка строки test003 приводит к удалению строки триггером, так как CreatedDate имеет возраст менее 10 дней.
- Вставка строки test004 через Триггер ничего не делает, так как CreatedDate старше 10 дней.
- Вставка строки test005 приводит к удалению строки триггером, так как ее CreatedDate меньше 10 дней.
- Вставка строки test006 ничего не делает с помощью триггера, поскольку CreatedDate не является допустимым форматом даты (таким образом, date (CreatedDate) возвращает ноль).
- Вставка строки test007 через триггер ничего не делает, так как CreatedDate не является допустимым форматом даты (таким образом, date (CreatedDate) возвращает ноль).
Использование SELECT * FROM sqlite_master WHERE type = 'trigger';
может использоваться для проверки существования триггера. Вывод будет выглядеть следующим образом (только выделенная строка): -