Dies ist eine Frage zu "am schnellsten", daher werden die Zeiten unten angegeben
Testaufbau, Tabelle mit>1 Million Zeilen
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
Leistungszusammenfassung – STUFF> SUBSTRING> REPLACE
update MetaDataServe set vc = STUFF(vc, 9, 0, '.Client')
(Die 2 Zeiten stammen von mehreren Ausführungen, um die Variabilität zu zeigen, sie ist ziemlich gering, sodass die Zeiten auf 3 % genau angesehen werden können.
update MetaDataServe set vc = REPLACE(vc, '.', '.Client.')
update MetaDataServe set vc = 'MindWorks.Client.' + SUBSTRING(vc, 11, 100)
Feste Zahl vs. PATINDEX vs. CHARINDEX
(Die Version mit fester Position ist bereits oben angegeben)
Leistungszusammenfassung – BEHOBEN> (PATINDEX =CHARINDEX)
update MetaDataServe set vc = STUFF(vc, PATINDEX('%.%',vc), 0, '.Client')
update MetaDataServe set vc = STUFF(vc, CHARINDEX('.',vc), 0, '.Client')
Anmerkungen:
- Alle oben angegebenen Update-Anweisungen funktionieren (mit ein oder zwei Anpassungen), je nach Ihren Anforderungen
- Vor jedem Test wird die gesamte Tabelle gelöscht und neu erstellt, um Caching-Probleme zu vermeiden
ACHTUNG !
Auch wenn STUFF schneller ist, kann man in knifflige Situationen geraten. Wenn Ihre Daten
enthalten"MindWorksNoDot"
Und Sie aktualisieren mit
update MetaDataServe set vc = STUFF(vc, CHARINDEX('.',vc), 0, '.Client')
Sie enden mit NULL! Denn wenn CHARINDEX den Punkt nicht finden kann, bewirkt der zweite Parameter von STUFF von Null (0), dass die gesamte Zeichenfolge auf NULL geht .
SCHLUSSWORTE
Da es nur 33 % langsamer als der STUFF-Ansatz ist, würde ich aus Sicherheits- und Zuverlässigkeitsgründen einfach eine REPLACE-Anweisung verwenden, d. h.
update MetaDataServe set vc = REPLACE(vc, '.', '.Client.')