Das verschachtelte Ersetzen ist in Ordnung, aber mit zunehmender Verschachtelungsebene nimmt die Lesbarkeit Ihres Codes ab. Wenn ich eine große Anzahl von Zeichen zu ersetzen hätte, würde ich mich für etwas Saubereres wie den folgenden tabellengesteuerten Ansatz entscheiden.
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]