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

Buscar y reemplazar el valor de la columna completa SQL Server

Espero haberlo entendido correctamente. Así que repetiré.

  1. Tienes 1 tabla con muchas entradas
  2. Tienes esta lista de Excel donde buscas la "columna de búsqueda"
  3. En caso de coincidencia, reemplace el valor completo con "reemplazar columna"

Si este es el caso, entonces esta podría ser la solución:

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 tabla "datos" sería en la que haces el reemplazo.

Puede haber bastantes efectos secundarios al usar eso (por ejemplo, comodines como % en "columna_búsqueda", tal vez múltiples coincidencias; en este momento se toma una "aleatoria", el rendimiento podría no ser el mejor, ...) Pero supongo que para una respuesta más precisa necesitaría una mejor pregunta.

Editar:

Gracias a Ralph... Agregué una prioridad a la tabla "reemplazar" para poder manejar coincidencias duplicadas.

En caso de que "RBC" tenga prioridad 3, el resultado es:

Con una prioridad de 1 es: