我第一次参加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
答案 0 :(得分:1)
我希望我理解正确。所以我再说一遍。
如果是这种情况,可能是解决方案:
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的结果是:
优先级为1,它是: