Dette er et spørgsmål om "hurtigst", så timings er angivet nedenfor
Testopsætning, tabel med>1 million rækker
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)
Stuff vs Replace vs SubString
Ydeevneoversigt - TING> SUBSTRING> UDSKIFT
update MetaDataServe set vc = STUFF(vc, 9, 0, '.Client')
(de 2 gange er fra flere henrettelser for at vise variabiliteten, den er ret lav, så tiderne kan betragtes som nøjagtige inden for 3%)
update MetaDataServe set vc = REPLACE(vc, '.', '.Client.')
update MetaDataServe set vc = 'MindWorks.Client.' + SUBSTRING(vc, 11, 100)
Fast nummer vs PATINDEX vs CHARINDEX
(Versionen med fast position er allerede angivet ovenfor)
Ydeevneoversigt – FIXED> (PATINDEX =CHARINDEX)
update MetaDataServe set vc = STUFF(vc, PATINDEX('%.%',vc), 0, '.Client')
update MetaDataServe set vc = STUFF(vc, CHARINDEX('.',vc), 0, '.Client')
Bemærkninger:
- Alle opdateringserklæringer givet ovenfor vil fungere (med en justering eller to) afhængigt af dine behov
- Før hver test slettes hele tabellen og genskabes for at forhindre cacheproblemer
FORSIGTIG!
Selvom STUFF er hurtigere, kan du komme i vanskelige situationer. Hvis dine data indeholder
"MindWorksNoDot"
Og du opdaterer ved hjælp af
update MetaDataServe set vc = STUFF(vc, CHARINDEX('.',vc), 0, '.Client')
Du ender med NULL! For når CHARINDEX ikke kan finde prikken, får den anden parameter til STUFF på nul (0) hele strengen til at gå til NULL .
SLUTTEORD
For sikkerhed og pålidelighed, da den kun er 33 % langsommere end STUFF-tilgangen, ville jeg blot bruge en REPLACE-sætning, dvs.
update MetaDataServe set vc = REPLACE(vc, '.', '.Client.')