Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Suchen und ersetzen Sie den gesamten Spaltenwert SQL Server

Ich hoffe ich habe es richtig verstanden. Also wiederhole ich.

  1. Sie haben 1 Tabelle mit vielen Einträgen
  2. Sie haben diese Liste von Excel, wo Sie nach der "Suchspalte" suchen
  3. Bei Übereinstimmung den gesamten Wert durch "Spalte ersetzen" ersetzen

Wenn dies der Fall ist, könnte dies die Lösung sein:

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

Die Tabelle "data" wäre diejenige, in der Sie die Ersetzung vornehmen.

Es kann einige Nebenwirkungen geben (z. B. Wildcards wie % in "search_column", möglicherweise mehrere Übereinstimmungen - im Moment wird dann eine "zufällige" genommen, die Leistung ist möglicherweise nicht die beste, ...) Aber ich schätze für Für eine genauere Antwort bräuchte ich eine bessere Frage.

Bearbeiten:

Danke an Ralph ... Ich habe der Tabelle "Ersetzen" eine Priorität hinzugefügt, um doppelte Übereinstimmungen handhaben zu können.

Falls "RBC" Priorität 3 hat, ist das Ergebnis:

Bei einer Priorität von 1 ist es: