mysql - 创建触发器查询以从 VBA 运行
问题描述
我想从 VBA (MS Access) 在 MariaDB (mySQL) 数据库中创建一个触发器。
DELIMITER $$
CREATE TRIGGER `updSortBy` BEFORE INSERT ON `cdevices`
FOR EACH ROW BEGIN SET @maxOrd = 0;
SELECT MAX(sortBy) INTO @maxOrd FROM cdevices WHERE levelID= NEW.levelID; SET NEW.sortBy = IF (@maxOrd IS NULL, 0, @maxOrd) + 1;
END $$
DELIMITER ;
这在我粘贴 phpMyAdmin 时有效,但如果从 VBA 运行则失败。
这是VBA中的相应部分。我使用与其他语句一起使用的 ADODB 连接:
.CommandText = "DELIMITER $$ CREATE TRIGGER `updSortBy` BEFORE INSERT ON `cdevices` FOR EACH ROW BEGIN SET @maxOrd = 0; SELECT MAX(sortBy) INTO @maxOrd FROM cdevices WHERE levelID= NEW.levelID; SET NEW.sortBy = IF (@maxOrd IS NULL, 0, @maxOrd) + 1; END $$ DELIMITER ;"
.Execute
我收到语法错误:
错误号:-2147217900
错误信息:
[ma-3.1.5][10.1.40-MariaDB]你的SQL语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“DELIMITER $$ CREATE TRIGGER 'updSortBy' BEFORE INSERT ON 'cdevices' FOR EACH ROW' 附近使用正确的语法
解决方案
将您的触发代码转换为单语句形式:
CREATE TRIGGER `updSortBy`
BEFORE INSERT
ON `cdevices`
FOR EACH ROW
SET NEW.sortBy = COALESCE((SELECT MAX(sortBy)
FROM cdevices
WHERE levelID= NEW.levelID), 1);
现在它不需要在分隔符中重新分配。
推荐阅读
- java - 如何对相机预览帧进行图像分析?
- amazon-web-services - 从主账户获取 AWS 子账户别名
- kubernetes - 如何在 Kubernetes 入口中指定自定义 Istio 入口网关
- encoding - 当 SMTP DeliveryFormat 为 International 时,MailMessage 主题(具有非 Ascii 字符)未编码
- c# - 如何同时使用 [FromBody] 和 [FromQuery] 属性?
- javascript - 锚点和粘性问题
- ios - 设备的 Swift 泛型类
- asp.net-mvc - 访问身份配置文件管理
- sonicwall - Sonicwall 扩展器可以跟踪我的互联网使用情况吗?
- python - python中的方程组象征性地