SQL Server 2008中的Replace Into操作

3

我尝试进行迁移,但是这个查询出现了问题:

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

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

我的问题是,我没有找到可以使用MERGE INTO工作的任何查询,所以我可能没有正确使用它。您有任何想法如何将其更改为MERGE INTO,并且在SQL Server 2008中更改它是否是必须的?

谢谢您的回答。


你是否正在尝试将数据从一张表迁移到另一张表? - duncanportelli
我不确定我是否理解了你的问题。你是在寻找使用Merge的方法吗?我不是一个SQL Server用户,但是我找到了这个链接 - Jermin Bazazian
1个回答

6

在你的情况下,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
            -- [...]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接