La sostituzione nidificata va bene, ma all'aumentare del livello di nidificazione, la leggibilità del codice diminuisce. Se avessi un gran numero di caratteri da sostituire, opterei per qualcosa di più pulito come l'approccio basato sulla tabella sottostante.
declare @Category varchar(25)
set @Category = 'ABC & DEF/GHI, LMN OP'
-- nested replace
select replace(replace(replace(replace(@Category, ' & ', '-'), '/', '-'), ', ', '-'), ' ', '-') as Department
-- table driven
declare @t table (ReplaceThis varchar(10), WithThis varchar(10))
insert into @t
values (' & ', '-'),
('/', '-'),
(', ', '-'),
(' ', '-')
select @Category = replace(@Category, ReplaceThis, isnull(WithThis, ''))
from @t
where charindex(ReplaceThis, @Category) > 0;
select @Category [Department]