coś takiego
Select * from TableName where Name Like 'Spa%'
ORDER BY case when soundex(name) = soundex('Spa') then '1' else soundex(name) end
powinno działać dobrze.
właściwie to będzie działać lepiej
Select * from TableName where Name Like 'Spa%'
ORDER BY DIFFERENCE(name, 'Spa') desc;
FWIW Zrobiłem kilka szybkich testów i jeśli 'Nazwa' jest w INDEKSIE NIEZAKLOSTEROWANYM, SQL użyje indeksu i nie wykona skanowania tabeli. Ponadto LIKE wydaje się zużywać mniej zasobów niż charindex (który zwraca mniej pożądane wyniki). Testowane na sql 2000.