搜索并替换整个列值SQL Server

时间:2016-03-09 19:39:27

标签: sql sql-server sql-server-2008

我第一次参加Stack Overflow。我需要帮助创建一个搜索特定字符串的过程,并将数据库中该列的整个值替换为另一个字符串。例如,这里是我需要搜索的数据并将其替换为:

search column:         replace column:
1.'rbc inv',           1.'RBC dominion securities',
2.'rbc dom',           2.'RBC dominion securities',
3.'RBC'                3.'RBC Bank'

我以Excel格式收到上述内容,然后将其作为表格上传到SQL Server,然后运行我的脚本,如下所示。有一些专栏目前有老年人的RBC投资,需要用'RBC支配证券(上面的第1号)代替。

我的问题是replace函数在搜索列彼此非常相似时不起作用,如上所示,它只替换找到的字符串,而不是替换整个单元格或列值。数据库。我尝试使用一行来将列值设置为null,然后将其替换为新值并多次失败。我有办法一次一个地手动执行此操作,但是当我收到一个包含超过300列的Excel工作表时,我需要查找和替换是非常令人沮丧的。有人可以帮忙吗?谢谢,麻烦您了。

这是我创建的脚本。

SET NOCOUNT ON;

DECLARE @searchColumnValue nvarchar(max), @replaceColumnValue nvarchar(max)

DECLARE replace_cursor CURSOR FOR 
SELECT searchColumn, replaceColumn             -
FROM dbo.search

OPEN replace_cursor

FETCH NEXT FROM replace_cursor
INTO @searchColumnValue , @replaceColumnValue 
WHILE @@FETCH_STATUS = 0
BEGIN
    UPDATE contact3                          
    SET notes = REPLACE(notes, @searchColumnValue, @replaceColumnValue)  

    FETCH NEXT FROM replace_cursor
    INTO @searchColumnValue , @replaceColumnValue
END 
CLOSE replace_cursor
DEALLOCATE replace_cursor

1 个答案:

答案 0 :(得分:1)

我希望我理解正确。所以我再说一遍。

  1. 您有1张包含大量条目的表格
  2. 您可以在excel中找到此列表,搜索"搜索列"
  3. 如果匹配,请用&#34替换整个值;替换列"
  4. 如果是这种情况,可能是解决方案:

    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
    

    表"数据"将是你替换的那个。

    使用它可能会产生相当多的副作用(例如%in" search_column",也许是多个匹配 - 现在是"随机"然后采取一个,性能可能不是最好的,...) 但我想更准确的答案我需要一个更好的问题。

    修改

    感谢Ralph ......我在"替换"表能够处理重复的匹配。

    如果" RBC"优先级为3的结果是:

    enter image description here

    优先级为1,它是:

    enter image description here