Usando Substituir no SQL

13

Eu tenho uma tabela e preciso atualizar alguns nomes, mas fiquei pensando sobre o

seguintes consultas:

Ambos farão o mesmo?

Consulta1

Update mytable
Set Name = Replace(Name,'Jeff','Joe')

Consulta2

Update mytable
Set Name = 'Joe'
where Name = 'Jeff'
Scorpion99
fonte

Respostas:

11

Não, não é o mesmo.

A primeira consulta procura por uma string dentro de toda a string (consulte replace () " Substitui todas as ocorrências de um valor especificado por outro valor. "), A segunda procura pela string exata.

Se você tiver registros como JeffJoe, a primeira consulta fornecerá JoeJoe, a segunda consulta fornecerá JeffJoe(sem nenhuma modificação).

irimias
fonte
25

Não, eles não farão a mesma coisa.

  1. A quantidade de esforço exigida pelo mecanismo SQL é completamente diferente. Na primeira consulta, o mecanismo deve passar por todas as linhas e executar uma operação de substituição de cadeia na coluna Nome. Na segunda consulta, ele está pesquisando na tabela onde o nome é "Jeff" e apenas atualizando a coluna Nome para Joe.

  2. A substituição de sequência é curinga. Portanto, na primeira consulta, o nome "Jeffrey" se tornaria "Joerey".

Jonathan Fite
fonte
3
O ponto 2 parece o mais importante. Se isso não acontecer, o desempenho é irrelevante.
Martin Smith
Você provavelmente está correto, mas na verdade não sabemos qual deve ser o objetivo comercial da atualização. Eu deveria ter revertido a ordem da análise, mas acho que mencionar as duas falhas foi a coisa certa a fazer. Um pensamento que vem à mente é que o OP o simplificou para nós, mas deixou de fora detalhes, como "Nome", na verdade, contém o nome completo e não apenas o primeiro nome.
Jonathan Fite