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

Rechercher et remplacer la valeur entière de la colonne SQL Server

J'espère que j'ai bien compris. Alors je vais répéter.

  1. Vous avez 1 table avec de nombreuses entrées
  2. Vous avez cette liste d'Excel où vous recherchez la "colonne de recherche"
  3. En cas de correspondance, remplacer la valeur entière par "remplacer la colonne"

Si tel est le cas, cela pourrait être la solution :

declare @data table (Column1 nvarchar(50))

insert  into @data
        (Column1)
values  (N'RbC investment for Seniors 65+'),
        (N'RBC inv for juniors')

declare @replace table
    (
     OriginalValue nvarchar(50),
     NewValue nvarchar(50),
     [priority] int
    )

insert  into @replace
        (OriginalValue, NewValue, [priority])
values  (N'rbc inv', N'RBC dominion securities', 2),
        (N'rbc dom', N'RBC dominion securities', 2),
        (N'RBC', N'RBC Bank', 3)

update  @data
set     Column1 = coalesce((
                            select top 1
                                    NewValue
                            from    @replace
                            where   Column1 like '%' + OriginalValue + '%'
                            order by [priority]
                           ), Column1)

select  *
from    @data

La table "data" serait celle où vous faites le remplacement.

Il peut y avoir pas mal d'effets secondaires en utilisant cela (par exemple, des caractères génériques comme % dans "search_column", peut-être plusieurs correspondances - en ce moment, une "aléatoire" est alors prise, la performance n'est peut-être pas la meilleure, ...) Mais je suppose que pour une réponse plus précise, j'aurais besoin d'une meilleure question.

Modifier :

Merci à Ralph... J'ai ajouté une priorité à la table "replace" pour pouvoir gérer les correspondances en double.

Dans le cas où "RBC" a la priorité 3, le résultat est :

Avec une priorité de 1 c'est :