13 我有一张桌子,我需要更新一些名称,但我想知道 以下查询: 两者都会一样吗? 查询1 Update mytable Set Name = Replace(Name,'Jeff','Joe') 查询2 Update mytable Set Name = 'Joe' where Name = 'Jeff' sql-server — 蝎子99 source
11 不,不一样。 第一个查询在整个字符串中查找字符串(请参阅replace() “ 用另一个字符串值替换所有出现的指定字符串值。 ”),第二个查询则查找确切的字符串。 如果您有类似JeffJoe的记录,则第一个查询将给出JoeJoe,第二个查询将给出JeffJoe(不做任何修改)。 — 伊里米亚斯 source
25 不,他们不会做同样的事情。 SQL引擎所需的工作量完全不同。在第一个查询中,引擎必须遍历每一行,并在“名称”列上执行字符串替换操作。在第二个查询中,它将搜索名称为“ Jeff”的表,并仅将“名称”列更新为Joe。 字符串替换是通配符。因此,在第一个查询中,名称“ Jeffrey”将变为“ Joerey”。 — 乔纳森·菲特 source 3 第二点似乎更重要。如果不执行正确的操作,则性能无关紧要。 — 马丁·史密斯 您可能是正确的,但实际上我们不知道更新的业务目标是什么。我应该颠倒分析的顺序,但是我认为提到这两个缺陷是正确的做法。想到的一个想法是,OP为我们简化了它,但省略了细节,因此“名称”实际上包含全名,而不仅仅是名字。 — 乔纳森·菲特