【发布时间】:2018-05-24 15:22:12
【问题描述】:
我正在尝试标准化表 ABC 中的列值。如果字符串中与STANDARD_VALUE_TABLE表中的INVALID列值匹配的部分,则替换对应的有效值。
STANDARDISATION 表 有大约 400 个值,所以根据我下面的过程,来自 ABC 的每个 col_value 被检查 400 次以替换无效值,然后为一个 col_value 运行 1 个更新语句。
这对我有用,但需要的时间比预期的要多。 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
【问题讨论】:
标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2012