Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL-'08 :plusieurs instructions de remplacement sont-elles une mauvaise pratique/existe-t-il une autre façon d'écrire cette requête ?

Le remplacement imbriqué est correct, mais à mesure que le niveau d'imbrication augmente, la lisibilité de votre code diminue. Si j'avais un grand nombre de caractères à remplacer, j'opterais pour quelque chose de plus propre comme l'approche basée sur le tableau ci-dessous.

    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]