sql >> Base de Datos >  >> RDS >> Sqlserver

SQL-'08:¿Son varias declaraciones de reemplazo una mala práctica/hay otra forma de escribir esta consulta?

El reemplazo anidado está bien, pero a medida que aumenta el nivel de anidamiento, la legibilidad de su código disminuye. Si tuviera una gran cantidad de caracteres para reemplazar, optaría por algo más limpio como el enfoque basado en tablas a continuación.

    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]