so etwas wie
Select * from TableName where Name Like 'Spa%'
ORDER BY case when soundex(name) = soundex('Spa') then '1' else soundex(name) end
sollte ok funktionieren.
tatsächlich wird dies besser funktionieren
Select * from TableName where Name Like 'Spa%'
ORDER BY DIFFERENCE(name, 'Spa') desc;
FWIW Ich habe einige schnelle Tests durchgeführt und wenn 'Name' in einem NICHT EINGESCHLOSSENEN INDEX ist, verwendet SQL den Index und führt keinen Tabellenscan durch. Außerdem scheint LIKE weniger Ressourcen zu verbrauchen als charindex (was weniger wünschenswerte Ergebnisse liefert). Getestet auf SQL 2000.