SQL表中字符串相互替换的优化方法

SQL表中字符串相互替换的优化方法,sql,tsql,query-optimization,Sql,Tsql,Query Optimization,问题陈述: 寻找在SQL表中用大量数据和多个案例相互替换字符串的优化方法 考虑一下,我有一个餐桌城市 我需要把班加罗尔换成德里,把德里换成班加罗尔,同样的,可能还有“n”个病例 我知道我们可以使用casing in update来替换表中的数据。在单个更新中使用Replace()函数或任何其他方法有更好的方法吗?老实说,最简单的方法似乎是CASE表达式: 选择ID, “班加罗尔”和“德里”时的案例名称 当“德里”和“班加罗尔” ... 别称 以名字结尾 从dbo.YourTable; 另一种方

问题陈述: 寻找在SQL表中用大量数据和多个案例相互替换字符串的优化方法

考虑一下,我有一个餐桌城市

我需要把班加罗尔换成德里,把德里换成班加罗尔,同样的,可能还有“n”个病例


我知道我们可以使用casing in update来替换表中的数据。在单个更新中使用Replace()函数或任何其他方法有更好的方法吗?

老实说,最简单的方法似乎是
CASE
表达式:

选择ID,
“班加罗尔”和“德里”时的案例名称
当“德里”和“班加罗尔”
...
别称
以名字结尾
从dbo.YourTable;

另一种方法是创建一个时态表,如

create table #tmpReplace(OriginalValue varchar(200), NewValue varchar(200))
和你的桌子做一个内部连接。优点是更新简单得多。缺点是,您仍然必须填充此表

例如:

update yt
set yt.Name = tmp.NewValue
from dbo.YourTable yt inner join #tmpReplace tmp on tmp.Name = OriginalValue

我建议在查询中创建一个具有“替换”值的派生表:


如果有“n”个案例,那么我必须多次编写“n”个案例的大小写,有没有比这更好的方法…?正确,@VishalIPatil。无论你用什么方法,你都需要把它们写出来。SQL Server无法读懂您的心思。它不知道需要用什么交换什么,你需要告诉它。正如问题中提到的,我知道这可以通过在更新中使用casting来实现。我们正在处理大量数据,正在寻找一个替代方案,我们在这方面遇到了一些性能问题。
更新
?套管的替代品。
update t
    set t.name = v.newvalue
    from t join
         (values ('Delhi', 'Bangalore'),
                 ('Bangalore', 'Delhi'),
                 . . . 
         ) v(oldvalue, newvalue)
         on v.oldvalue = t.name;