如何在SQL中更新数据以避免while循环以获得更好的性能

时间:2019-05-02 12:10:19

标签: sql-server sql-update sql-server-2014

我正在while循环中(在存储过程中)更新数据,这严重破坏了性能。在更新表格时,是否有其他替代(最佳)解决方案,它们的性能相对更好。

我已经了解过CTE,但无法解决当前的问题

            WHILE (@Counter <= (SELECT COUNT(id) FROM @TopicsIds))
                 BEGIN
                   SELECT @CurrentTopicId = TopicId
                   FROM @TopicsIds
                   WHERE id = @Counter;
                   UPDATE @Modules
                  SET TopicId = @CurrentTopicId
                 WHERE id = @Counter;

                SET @Counter = @Counter + 1;
                END;

2 个答案:

答案 0 :(得分:0)

UPDATE m
SET TopicId = t.TopicId
FROM @Modules m
    JOIN @TopicsIds t ON m.Id = t.Id

答案 1 :(得分:0)

为什么要使用循环进行更新,请使用直接更新查询,例如

 update a set a.TopicId = b.TopicId
from @Modules as a
inner join @TopicsIds as b on a.id = b.id