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