我想使用原始 sql 创建一个触发器,这个 sql 为:
DELIMITER $$
CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer
AFTER UPDATE ON platformdb.VehicleTravels FOR EACH ROW
BEGIN
UPDATE Vehicles SET TotalKilometers=new.Kilometers WHERE ID=new.VehicleId;
END$$
DELIMITER ;
在mariadb中执行没有问题,但是使用EF core的raw sql查询会报DELIMITER错误,如下
MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER $$ CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer A' at line 1 ---> MySql.Data.MySqlClient.MySqlException (0x80004005): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELIMITER $$ CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer A' at line 1
使用DELIMITER $$;
作为同样的错误
那么,如何用DELIMITER
执行原始 sql ,或者有什么替代方法?
请,谢谢!
DELIMITER $$
用于 MySQL Workbench。 在 C# 代码中,只需使用完整的命令文本创建一个MySqlCommand
并执行它:
using (var command = new MySqlCommand(@"CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer
AFTER UPDATE ON platformdb.VehicleTravels FOR EACH ROW
BEGIN
UPDATE Vehicles SET TotalKilometers=new.Kilometers WHERE ID=new.VehicleId;
END", connection))
{
command.ExecuteNonQuery();
}
DELIMITER $$
用于 MySQL Workbench。 在 C# 代码中,只需使用完整的命令文本创建一个MySqlCommand
并执行它:using (var command = new MySqlCommand(@"CREATE OR REPLACE TRIGGER platformdb.trig_updatevehiclekilometer AFTER UPDATE ON platformdb.VehicleTravels FOR EACH ROW BEGIN UPDATE Vehicles SET TotalKilometers=new.Kilometers WHERE ID=new.VehicleId; END", connection)) { command.ExecuteNonQuery(); }
谢谢,这对我很有用。非常感谢!