Python 在Sql Server中对同一源/目标表使用合并

Python 在Sql Server中对同一源/目标表使用合并,python,sql,sql-server,insert,Python,Sql,Sql Server,Insert,我想从python程序中对一个表执行Upsert。我找到了MERGE命令,但这似乎是用于合并两个表的特定命令。我想从一个查询中更新/插入一个字段到表中 我想要比先删除后插入或先选择后[插入/更新]更快的东西,我正在尝试让合并工作。但是,当我在SSMS中运行它时,它正在更新数据库表中的所有行 查询是: MERGE INTO [LastPriceUpdate] USING (SELECT [EventID] FROM [LastPriceUpdate] where [EventID] = 1501

我想从python程序中对一个表执行Upsert。我找到了MERGE命令,但这似乎是用于合并两个表的特定命令。我想从一个查询中更新/插入一个字段到表中

我想要比先删除后插入或先选择后[插入/更新]更快的东西,我正在尝试让合并工作。但是,当我在SSMS中运行它时,它正在更新数据库表中的所有行

查询是:

MERGE INTO [LastPriceUpdate] USING 
(SELECT [EventID] FROM [LastPriceUpdate] where [EventID] = 1501845) AS source
ON (source.[EventID] = 1501845)
WHEN MATCHED THEN UPDATE SET [LastPriceUpdate] = getdate() -- where clause not allowed
WHEN NOT MATCHED BY TARGET THEN INSERT ([EventID], [LastPriceUpdate]) VALUES (1501845, getdate());
该查询将更新所有行,我只希望它使用getdate()更新LastPriceUpdate列,其中EventID={somenumber}

可能的答案: 这可能是一个解决方案;在零件上使用目标

MERGE INTO [LastPriceUpdate] AS target USING 
(SELECT [EventID] FROM [LastPriceUpdate] where [EventID] = 1501845) AS source
ON (target.[EventID] = 1501845)
WHEN MATCHED THEN UPDATE SET [LastPriceUpdate] = getdate() -- where clause not allowed
WHEN NOT MATCHED BY TARGET THEN INSERT ([EventID], [LastPriceUpdate]) VALUES (1501845, getdate());  

我想你在找这样的东西

MERGE INTO LastPriceUpdate as lpu
USING (
        SELECT getdate() as LastPriceUpdate,
               1501845 as EventID
      ) AS src
ON lpu.EventID = src.EventID
WHEN MATCHED THEN
  UPDATE SET LastPriceUpdate = src.LastPriceUpdate
WHEN NOT MATCHED BY TARGET THEN
  INSERT (EventID, LastPriceUpdate) 
    VALUES (src.EventID, src.LastPriceUpdate);