【问题标题】:Replace Into in SQL Server 2008在 SQL Server 2008 中替换为
【发布时间】:2012-04-30 15:06:50
【问题描述】:

我尝试进行迁移,但这个查询有问题:

$DB->query("replace into periodetojour(idperiode,idjour,heure)
            values('".addslashes($idperiode)."','2','".addslashes($mardi)."')");

我看到 REPLACE INTO 不能在 SQL Server 2008 中使用,我必须使用 MERGE INTO

我的问题是我没有找到任何使用MERGE INTO 工作的查询,所以我可能没有很好地使用它。您知道如何使用 MERGE INTO 更改它吗?是否有义务在 SQL Server 2008 中更改它?

感谢您的回答。

【问题讨论】:

  • 您是否正在尝试将数据从一个表迁移到另一个表?
  • 不确定我是否理解您的问题。您是否正在寻找使用Merge 的方法?我不是 sql-server 用户,但发现 this.

标签: mysql sql-server-2008 migration


【解决方案1】:

在您的情况下,MERGE 语句如下所示:

$DB->query("MERGE INTO periodetojour dst 
            USING ( 
              SELECT '".addslashes($idperiode)."' idperiode, 
                     '2' idjour, 
                     '".addslashes($mardi)."' heure 
            ) src  
            ON src.idperiode = dst.idperiode  
            WHEN MATCHED THEN UPDATE SET  
              dst.idjour = src.idjour, 
              dst.heure = src.heure  
            WHEN NOT MATCHED THEN INSERT (idperiode, idjour, heure)  
              VALUES(src.idperiode, src.idjour, src.heure)");

这是假设 idperiode 是您的主键。如果主键由 (idperiode, idjour) 组成,则必须相应地调整 ON 子句和 WHEN MATCHED THEN UPDATE SET 子句:

            -- [...]
            ON src.idperiode = dst.idperiode  
            AND src.idjour = dst.idjour
            WHEN MATCHED THEN UPDATE SET  
              dst.heure = src.heure
            -- [...]

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    相关资源
    最近更新 更多