Try this:with cte as (select [DESC] as org_desc ,cast(left([DESC],patindex('%[^A-Z0-9 ]%',[DESC])-1) +right([DESC],len([DESC])-patindex('%[^A-Z0-9 ]%',[DESC])) as varchar(40) ) as new_desc from TBL_DESC where [DESC] like '%[^A-Z0-9 ]%' union all select org_desc ,cast(left(new_desc,patindex('%[^A-Z0-9 ]%',new_desc)-1) +right(new_desc,len(new_desc)-patindex('%[^A-Z0-9 ]%',new_desc)) as varchar(40) ) as new_desc from cte where new_desc like '%[^A-Z0-9 ]%' )select * from cte where new_desc not like '%[^A-Z0-9 ]%'
You probably want to change the type and length og the fields marked in red.