我有一列文件夹名称,我有一个部分目录地址。当我添加或更改文件夹名称时 - 我希望附加目录地址...
所以......当我更新文件夹名称时,触发器应该只是自动将文件夹名称添加到目录的末尾。但是,虽然我在MySQL中的工作相似 - 出于某种原因,我无法让SQLite工作
`CREATE TRIGGER df_match_a AFTER UPDATE ON user_cats
BEGIN
SET NEW.save_directory = CONCAT(OLD.save_directory,NEW.folder)
END;`
我得到了:
near "SET": syntax error:
这是一个可以实现我想要的MySQL代码... 它会自动更新API_Call>>当我将新信息添加到用户名 - 和Playlist_ID
时CREATE DEFINER=`root`@`localhost` TRIGGER `api_links` BEFORE INSERT ON `spotify follow lists` FOR EACH ROW BEGIN
SET NEW.`API Call` = CONCAT("https://api.spotify.com/v1/users/",NEW.`Username`,"/playlists/",NEW.`Playlist ID);
END
这就是数据库转储的样子......
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE IF NOT EXISTS "user_cats" (
`category` TEXT,
`uploader` TEXT,
`folder` TEXT,
`playlists` TEXT,
`playlist_image` TEXT,
`save_directory` TEXT
);
INSERT INTO user_cats VALUES('Comics','ComicsExplained','DC Rebirth','[''New to DC Comics? Start here!'']',NULL,'%USERPROFILE%\Videos\Online Videos\Comics\ComicsExplained\');
INSERT INTO user_cats VALUES('Comics','Comicstorian',NULL,NULL,NULL,NULL);
INSERT INTO user_cats VALUES('Video Games','IGN','Daily Fix','[''Daily Fix'']',NULL,'%USERPROFILE%\Videos\Online Videos\Video Games\IGN\Daily Fix\');
INSERT INTO user_cats VALUES('Comics','Marvel Entertainment','Marvel Top 10','[''Marvel Top 10'']',NULL,'%USERPROFILE%\Videos\Online Videos\Comics\Marvel Entertainment\');
INSERT INTO user_cats VALUES('','ScrewAttack!',NULL,NULL,NULL,NULL);
COMMIT;
答案 0 :(得分:0)
我认为它类似
CREATE TRIGGER df_match_a AFTER UPDATE ON user_cats
BEGIN
UPDATE user_cats SET NEW.save_directory = CONCAT(OLD.save_directory,NEW.folder)
END;
答案 1 :(得分:0)
感谢您的帮助;我终于明白了! 以下是详细信息......
因此,MySQL执行和SQLite之间存在一些差异......
CONCAT()
,但SQLite使用||
所以...这...
SET NEW.save_directory = CONCAT(OLD.save_directory,NEW.folder)
...成了
SET NEW.save_directory = (OLD.save_directory || NEW.folder)
SET NEW.save_directory = (OLD.save_directory || NEW.folder)
是语法错误,但是......
SET save_directory = (OLD.save_directory || NEW.folder)
作品
SET save_directory = (OLD.save_directory || NEW.folder)
END;
但是,我应该在New.folder)
`SET save_directory = (OLD.save_directory || NEW.folder);
END;`
WHERE
选项才能使用新的save_directory
名称 folder
列
醇>
有了......
SET save_directory = (OLD.save_directory || NEW.folder);
END;
一个folder
名称的更改将更改所有 save_directory
行
但是,添加WHERE
选项可确保只更新NEW.folder
名称的行。
SET save_directory = (OLD.save_directory || NEW.folder) WHERE folder = NEW.folder;
END
最后......
使用...
SET save_directory = (OLD.save_directory || "\" || NEW.folder) WHERE folder = NEW.folder;
END
我的旧save_directory每次都会附加新的。 例如,我开始......
%USERPROFILE%\Videos\Online Videos\IGN
将文件夹更新为Daily Fix
...
%USERPROFILE%\Videos\Online Videos\Video Games\IGN\Daily Fix
将文件夹更新为Mass Effect
...
%USERPROFILE%\Videos\Online Videos\Video Games\IGN\Daily Fix\Mass Effect
等等......
但是,如果我使用了类别和上传者列......
UPDATE user_cats SET save_directory = ("%USERPROFILE%\Videos\Online Videos\" || category || "\" || uploader || "\" || NEW.folder) WHERE folder = NEW.folder;
END;
终于有效了! :)
另外,我在插入新值时做了第二个语句处理,而不仅仅是在我更新时。所以,最后的TRIGGER
陈述是......
<强>解决方案:强>
CREATE TRIGGER df_match_a
AFTER UPDATE ON user_cats FOR EACH ROW
BEGIN
UPDATE user_cats SET save_directory = ("%USERPROFILE%\Videos\Online Videos\" || category || "\" || uploader || "\" || NEW.folder) WHERE folder = NEW.folder;
END;
CREATE TRIGGER df_match_b
AFTER INSERT ON user_cats FOR EACH ROW
BEGIN
UPDATE user_cats SET save_directory = ("%USERPROFILE%\Videos\Online Videos\" || category || "\" || uploader || "\" || NEW.folder) WHERE folder = NEW.folder;
END;