标准化列值需要很长时间。如何优化流程?

Standardizing column values takes long time. How to optimize the process?

我正在尝试标准化 Table ABC 中的列值。如果字符串中与STANDARD_VALUE_TABLEtable中的INVALID列值匹配的部分,则对应的有效值被替换。

STANDARDISATION Table 有大约 400 个值,所以根据我下面的程序,每个来自 ABC 的 col_value 被检查 400 次以替换无效值,然后 1 个更新语句运行一个 col_value.

这对我有用,但比预期的时间要长。 21K条记录大约需要30分钟。

任何人都可以提出其他方法来提高性能吗?

set updated_col_value_v =''
DECLARE COL_VALUE_CURSOR CURSOR for
select col_value from ABC
fetch next from COL_VALUE_CURSOR into @Col_value_variable
while @@FETCH_STATUS = 0
     begin
     DECLARE Fuzzy_invalid_value_cursor CURSOR FOR
     SELECT INVALID_VALUES FROM STANDARD_VALUE_TABLE
     fetch next from Fuzzy_invalid_value_cursor into @invalid_value_variable
     WHILE @@FETCH_STATUS = 0
           Begin
           select @Char_to_replace = VALID_VALUES  from STANDARD_VALUE_TABLE where INVALID_VALUES=@invalid_value_variable
           if @updated_col_value_v=''
           set @replaced_value = replace(@Col_value_variable,@invalid_value_variable,@Char_to_replace) 
           else
           set @replaced_value = replace(@updated_col_value_v,@invalid_value_variable,@Char_to_replace)

           set @updated_col_value_v = @replaced_value

           fetch next from Fuzzy_invalid_value_cursor into @invalid_value_variable
           end
    update ABC set updated_col_value=@updated_col_value_v where col_value=@Col_value_variable

     close Fuzzy_invalid_value_cursor
     deallocate Fuzzy_invalid_value_cursor

fetch next from COL_VALUE_CURSOR into @Col_value_variable
End
close COL_VALUE_CURSOR
deallocate COL_VALUE_CURSOR

我会尝试摆脱外部光标。与其一次更新一行所有 400 个替换,不如每次替换一次,然后更新所有需要它的行。您的 table 无效值的安全性如何?如果你不需要担心 sql 注入,我会在 Fuzzy_Invalid-Value_Cursor 中使用类似下面的东西 - 你只更新具有特定无效值的行,但你正在做所有他们一次。是的,您可能会多次更新某些行,但您也可能会完全跳过其中一些行,这取决于数据,并且您只对实际需要它的行执行替换功能。

Update ABC Set Col_Value = replace(Col_Value,@invalid_value_variable,@Char_to_replace)
Where Col_Value like '%' + @invalid_value_variable + '%'