Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL-'08:Várias instruções de substituição são uma prática ruim/existe outra maneira de escrever essa consulta?


A substituição aninhada é boa, mas à medida que o nível de aninhamento aumenta, a legibilidade do seu código diminui. Se eu tivesse um grande número de caracteres para substituir, optaria por algo mais limpo, como a abordagem orientada pela tabela abaixo.
    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]