Tsql 如何优化更新查询?

Tsql 如何优化更新查询?,tsql,Tsql,我有一个包含两个字段的表: PIN和文件名 我使用存储过程读取共享文件夹并填充文件名字段,例如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].[phar

我有一个包含两个字段的表: PIN和文件名

我使用存储过程读取共享文件夹并填充文件名字段,例如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 
550条记录需要25秒


有人能帮我们做一个更新语句吗?

通常我们不使用游标进行更新。我想你的情况下,你可以简单地运行下面的查询

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 ) +'%'

“如何优化更新查询?”不使用
光标将是一个很好的开始。为什么不在一个
UPDATE
语句中执行此操作呢?SQL设计用于处理集合而不是循环。光标是一个循环。当可以使用select/查询时,使用光标几乎是不正确的。
update
语句
set pin=SUBSTRING(右(RTRIM(文件名),CHARINDEX(“”),REVERSE(RTRIM(文件名))+''''-1),0,@length)
我没有仔细检查语法。