Esta es una pregunta sobre "más rápido", por lo que los tiempos se proporcionan a continuación
Configuración de prueba, tabla con>1 millón de filas
create table MetaDataServe (id int identity primary key, vc varchar(max));
insert MetaDataServe values
('MindWorks.Accounts'),
('MindWorks.Transactions'),
('MindWorks.Commissions');
insert MetaDataServe
select vc
from MetaDataServe, master..spt_values a, master..spt_values b
where b.number between 1 and 30
-- (1090110 row(s) affected)
Cosas vs Reemplazo vs SubCadena
Resumen de rendimiento - COSAS> SUBCADENA> REEMPLAZAR
update MetaDataServe set vc = STUFF(vc, 9, 0, '.Client')
(los 2 tiempos son de múltiples ejecuciones para mostrar la variabilidad, es bastante bajo, por lo que los tiempos pueden considerarse precisos dentro del 3%)
update MetaDataServe set vc = REPLACE(vc, '.', '.Client.')
update MetaDataServe set vc = 'MindWorks.Client.' + SUBSTRING(vc, 11, 100)
Número fijo vs PATINDEX vs CHARINDEX
(La versión de posición fija ya se da arriba)
Resumen de rendimiento - FIJO> (PATINDEX =CHARINDEX)
update MetaDataServe set vc = STUFF(vc, PATINDEX('%.%',vc), 0, '.Client')
update MetaDataServe set vc = STUFF(vc, CHARINDEX('.',vc), 0, '.Client')
Notas:
- Todas las declaraciones de actualización proporcionadas anteriormente funcionarán (con un ajuste o dos) según sus necesidades
- Antes de cada prueba, la tabla completa se elimina y se vuelve a crear para evitar problemas de almacenamiento en caché
¡PRECAUCIÓN!
Aunque STUFF es más rápido, puedes enfrentarte a situaciones difíciles. Si sus datos contienen
"MindWorksNoDot"
Y actualizas usando
update MetaDataServe set vc = STUFF(vc, CHARINDEX('.',vc), 0, '.Client')
¡Terminas con NULL! Porque cuando CHARINDEX no puede encontrar el punto, el segundo parámetro de STUFF de cero (0) hace que toda la cadena vaya a NULL .
PALABRAS FINALES
Por seguridad y confiabilidad, dado que es solo un 33% más lento que el enfoque STUFF, simplemente usaría una instrucción REPLACE, es decir,
update MetaDataServe set vc = REPLACE(vc, '.', '.Client.')