使用合并进行更新

时间:2013-11-13 13:06:26

标签: sql-server sql-server-2008 tsql

我经常在工作中运行更新,但是,我想开始使用merge命令。 不过我还是不太熟悉它。

您如何使用MERGE进行转换,或者至少让我了解以下更新声明?

BEGIN TRANSACTION T1

SELECT @@TRANCOUNT;

WITH RADHE2
     AS (SELECT ROW_NUMBER () OVER( PARTITION BY Assigned_To, Assigned_To_Descriptor /*,..*/
                                     /* Irrelevant columns removed for brevity*/
                                        ORDER BY Rn_Create_Date DESC, Assigned_To DESC ) AS ID,
                *
         FROM   PivCRM_Prod_Online_ED.dbo.Rn_Appointments
         WHERE  AN_ACTIVE = 1
                AND rn_edit_date > '12 nov 2013'
                AND ASSIGNED_TO = 0x000000000000074F
                AND notes LIKE 'TAM_Indigo Base_Oct 2013')
--======================================================
--SETTING Appt_Date TO TOMORROW
UPDATE PivCRM_Prod_Online_ED.dbo.Rn_Appointments
SET    Appt_Date = '14 NOV 2013'
FROM   PivCRM_Prod_Online_ED.dbo.Rn_Appointments R
       INNER JOIN RADHE2 R1
         ON R.RN_APPOINTMENTS_ID = R1.Rn_APPOINTMENTS_ID
WHERE  R1.ID = 1
--COMMIT TRANSACTION T1

2 个答案:

答案 0 :(得分:3)

根据表中数据的存在,MERGE可用于在INSERT或UPDATE之间进行选择。如果您只进行更新,则可以继续进行更新。

答案 1 :(得分:1)

Merge是一个名为“Upsert”的人。 Aka,在同一个“呼叫”中更新和插入逻辑。

http://en.wikipedia.org/wiki/Upsert

如果你使用aka字(upsert),它会帮助你为正确的工作选择合适的工具。