Функция является безусловно лучшим вариантом, если вы должны сделать это встроенным, вы можете заменить ее в рекурсивном CTE и использовать ее в качестве базовой таблицы;
select 1 as id,
'qw2££!"£$%^&**(' as F into #TESTTABLE
insert #TESTTABLE
values (2, 'xxx'),
(3, ''),
(4,'$'),
(5,'qq""ee$$')
;with cte(id, stripped) as (
select id, cast(F as varchar(1024)) from #TESTTABLE
union all
select id, cast(stuff(stripped, patindex('%[^a-z]%', stripped), 1, '') as varchar(1024))
from cte
where patindex('%[^a-z]%', stripped) > 0
)
select * from cte
where patindex('%[^a-z]%', stripped) = 0
order by id
Результат:
>>id stripped
>>1 qw
>>2 xxx
>>3
>>4
>>5 qqee