Как обновить данные в sql, избегая цикла while для лучшей производительности - PullRequest
0 голосов
/ 02 мая 2019

Я обновляю данные в цикле 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 голосов
/ 02 мая 2019

Зачем использовать цикл для обновления, используйте прямой запрос на обновление, например

 update a set a.TopicId = b.TopicId
from @Modules as a
inner join @TopicsIds as b on a.id = b.id
0 голосов
/ 02 мая 2019
UPDATE m
SET TopicId = t.TopicId
FROM @Modules m
    JOIN @TopicsIds t ON m.Id = t.Id
...