【问题标题】:Translate a Merge statement used in sql server in Mysql在 Mysql 中翻译 sql server 中使用的 Merge 语句
【发布时间】:2021-02-14 16:08:11
【问题描述】:

请支持,我在 sql server 数据库中使用 Merge 语句创建了一个存储过程。我想在 Mysql 数据库中使用相同的存储过程。不幸的是,似乎 Merge 功能在 MySql 中不起作用。任何人都可以帮助我做到这一点?在我的存储过程下面

ALTER PROCEDURE [dbo].[ValiderFacturePharmacie] 
    @numdossierhospi VARCHAR(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
    MERGE INTO pharmacie P
    USING (SELECT NumDossHp, SUM(TotalProd) AS Total
         FROM pharmacie WHERE NumDossHp = @numdossierhospi
         GROUP BY NumDossHp) T
    ON (P.NumDossHp = T.NumDossHp)
    WHEN MATCHED THEN
    UPDATE SET
    P.TotalPharma = T.Total,
    P.Etat ='VALIDE';
END

【问题讨论】:

    标签: mysql sql-server merge


    【解决方案1】:

    几乎一样

    DELIMITER //
    CREATE PROCEDURE ValiderFacturePharmacie (
    _numdossierhospi VARCHAR(50))
    BEGIN
    UPDATE pharmacie P INNER JOIN
    (SELECT NumDossHp, SUM(TotalProd) AS Total
         FROM pharmacie WHERE NumDossHp = _numdossierhospi
         GROUP BY NumDossHp) T
    ON (P.NumDossHp = T.NumDossHp)
    SET
    P.TotalPharma = T.Total,
    P.Etat ='VALIDE';
    END //
    DELIMITER ;
    

    【讨论】:

      【解决方案2】:

      感谢您的回答!我通过使用下面的这个语句解决了这个问题

      DELIMITER $$
      CREATE DEFINER=`root`@`localhost` PROCEDURE `ValiderFacturePharmacie`(IN `numdossierhospi` VARCHAR(30))
          NO SQL
      UPDATE pharmacies
      SET totalpharma = (select SUM(totalprod) from pharmacies where numdosshp = numdossierhospi),
      etat = 'FACTURER' 
      WHERE numdosshp = numdossierhospi$$
      DELIMITER ;
      

      【讨论】:

        猜你喜欢
        • 2020-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        • 2010-11-28
        • 2011-09-03
        • 1970-01-01
        相关资源
        最近更新 更多