Как оптимизировать запрос на обновление? - PullRequest
0 голосов
/ 29 октября 2019

У меня есть таблица с 2 полями: PIN-код и имя_файла

Я использую хранимую процедуру для чтения общей папки и заполнения поля fileName, например, filexxx_PIN.pdf;Затем я использую курсор для просмотра записей, извлечения PIN-кода и обновления записи;

DECLARE @PIN AS VARCHAR(100);
DECLARE @name AS VARCHAR(500);
DECLARE @start INT , @length INT;
DECLARE db_cursor CURSOR LOCAL FOR  SELECT FileName FROM [dbo].[pharmaCV];
SET @length = 11
OPEN db_cursor  
FETCH NEXT FROM db_cursor INTO @name  

WHILE @@FETCH_STATUS = 0  
BEGIN  
      SET @PIN = RTRIM(@name)
      SET @PIN = RIGHT(@PIN, CHARINDEX('_', REVERSE(@PIN) + '_') - 1)
      SET @PIN = SUBSTRING (@PIN  , 0, @length ) 
      UPDATE pharmaCV SET PIN = @PIN WHERE FileName LIKE '%'+@PIN +'%'

      FETCH NEXT FROM db_cursor INTO @name 
END 

CLOSE db_cursor  
DEALLOCATE db_cursor 

Это займет 25 секунд для 550 записей;

Может кто-нибудь помочь с оператором UPDATE, который делает это?

1 Ответ

0 голосов
/ 05 ноября 2019

Обычно мы не используем курсор для обновления. В вашем случае вы можете просто запустить ниже запрос

UPDATE [dbo].[pharmaCV]
    SET PIN = SUBSTRING (RIGHT(RTRIM(FileName), CHARINDEX('_', REVERSE(RTRIM(FileName)) + '_') - 1)  , 0, 11 ) 
WHERE FileName LIKE '%'+SUBSTRING (RIGHT(RTRIM(@name), CHARINDEX('_', REVERSE(RTRIM(@name)) + '_') - 1)  , 0, 11 ) +'%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...