Tsql 如何优化更新查询?
我有一个包含两个字段的表: PIN和文件名 我使用存储过程读取共享文件夹并填充文件名字段,例如filexxx_PIN.pdf;然后,我使用光标遍历记录,提取PIN并更新记录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
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)
我没有仔细检查语法。