在Sq中使用具有相同源/目标表的MERGE

2024-10-01 11:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想对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}

可能的答案: 这可能是一个修复;使用on部分的目标。在

^{pr2}$

Tags: 命令程序数据库sourcemergewherewhenthen
1条回答
网友
1楼 · 发布于 2024-10-01 11:30:26

我想你在找这样的东西。在

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);  

相关问题 更多 >