Pomelo.entityframeworkcore.mysql: 如何在原始 sql 语句中使用 DELIMITER

创建于 2019-09-04  ·  3评论  ·  资料来源: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

我想使用原始 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 ,或者有什么替代方法?

请,谢谢!

closed-question type-question

所有3条评论

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();
}

谢谢,这对我很有用。非常感谢!

此页面是否有帮助?
0 / 5 - 0 等级