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

Sql 标准化列值需要很长时间。如何优化流程?,sql,sql-server,sql-server-2008,sql-server-2005,sql-server-2012,Sql,Sql Server,Sql Server 2008,Sql Server 2005,Sql Server 2012,我正在尝试标准化表ABC中的列值。如果字符串中与标准值表中无效列值匹配的部分,则替换相应的有效值 标准化表有大约400个值,因此根据我下面的过程,ABC中的每个列值都会被检查400次以替换无效值,然后1个update语句为一个列值运行 这对我来说很有效,但所花的时间超出了预期。21K张唱片大约需要30分钟 有人能提出其他方法来提高性能吗 我会尝试摆脱外部光标。不要一次更新一行所有400个替换,而是每次替换一次,并更新所有需要的行。无效值表的安全性如何?如果您不需要担心sql注入,我会在Fuzzy

我正在尝试标准化表ABC中的列值。如果字符串中与标准值表中无效列值匹配的部分,则替换相应的有效值

标准化表有大约400个值,因此根据我下面的过程,ABC中的每个列值都会被检查400次以替换无效值,然后1个update语句为一个列值运行

这对我来说很有效,但所花的时间超出了预期。21K张唱片大约需要30分钟

有人能提出其他方法来提高性能吗


我会尝试摆脱外部光标。不要一次更新一行所有400个替换,而是每次替换一次,并更新所有需要的行。无效值表的安全性如何?如果您不需要担心sql注入,我会在Fuzzy_Invalid-Value_游标中使用如下内容-您只更新具有特定无效值的行,但同时执行所有操作。是的,您可能会多次更新某些行,但也可能会完全跳过其中一些行,具体取决于数据,并且您只对实际需要的行执行替换功能

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

我考虑使用这个选项来限制仅对具有无效值的行进行替换和更新。但是在您的情况下,我们需要为每个替换运行update语句。无论如何,让我试试这个选项,看看需要多长时间才能完成。谢谢ManWell,是的,在这种情况下,您正在运行400个更新。但是在上一个版本中,您运行的是21K更新—每行一个更新,而在这个版本中,您执行的替换操作要少得多。如果like子句不是太慢,那么我认为这应该更快——无论如何,这是值得尝试的。
Update ABC Set Col_Value = replace(Col_Value,@invalid_value_variable,@Char_to_replace)
Where Col_Value like '%' + @invalid_value_variable + '%'